C# 有没有办法在代码中Debug.Assert()之后继续?

C# 有没有办法在代码中Debug.Assert()之后继续?,c#,unit-testing,assertions,C#,Unit Testing,Assertions,我的代码对“应该”正确的数据进行操作。但是,在开发过程中,有时会获取无效数据。 当这种情况发生时,我想提出调试断言,如果用户选择继续,代码将过滤掉无效记录并继续对“安全”数据进行操作 //断言不正确的数据 Assert(person.Items.All(item=>item.IsValid),“数据不一致!”; //对过滤后的数据进行操作 this.ItemViewModels=新的ObservableCollection( 个人物品 .Where(i=>item.IsValid)//仅使用正确

我的代码对“应该”正确的数据进行操作。但是,在开发过程中,有时会获取无效数据。
当这种情况发生时,我想提出调试断言,如果用户选择继续,代码将过滤掉无效记录并继续对“安全”数据进行操作

//断言不正确的数据
Assert(person.Items.All(item=>item.IsValid),“数据不一致!”;
//对过滤后的数据进行操作
this.ItemViewModels=新的ObservableCollection(
个人物品
.Where(i=>item.IsValid)//仅使用正确的数据
.选择(i=>newitemviewmodel(lang,i));
当我选择对过滤后的数据进行操作时,我想对代码路径进行单元测试

问题:有没有办法在单元测试中通过断言调用?
是否等同于在“断言失败”对话框中单击
OK=Continue


TIA

您不应该为此使用
Debug.Assert

Debug.Assert
仅用作调试辅助工具。
它将不会在发布模式下编译


相反,您应该创建自己的方法,它将向用户显示一个更简单的对话框,并且可以配置为始终继续进行单元测试。(例如,使用一个
公共静态bool ShowWarnings
属性)

除了SLaks的答案之外,我还要补充一点,您想要做的事情在逻辑上是不一致的。断言应该用来记录一个不可能为false的条件。如果出现了false条件,那么你就知道你有一个bug;断言的目的是(1)作为一种注释,向读者描述代码中此时必须为真的内容;(2)作为一种调试辅助工具,告诉您何时出现错误

由于正确代码中的正确断言永远不会触发,因此无法测试断言触发。测试的前提是生成软件的可能配置并验证其正确性;但是,具有正确断言的正确代码永远不会有断言触发的配置

听起来您使用Assert并不是为了记录您知道是真的东西,而是记录您希望是真的或通常是真的东西。不要为此使用断言。如果有任何程序输入导致违反断言,那么您需要删除断言,或者在获取无效数据时导致异常,以便断言永远不会看到它。断言旨在记录必须真实的内容,而不是大多数情况下真实的内容

另见这一相关问题:

// assert incorrect data
Debug.Assert(person.Items.All(item => item.IsValid), "Inconsistent data!");

// operate on filtered data
this.ItemViewModels = new ObservableCollection<ItemViewModel>(
                             person.Items
                                   .Where(i =>item.IsValid) // Use only correct data
                                   .Select(i => new ItemViewModel(lang, i)));