gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:02:09 26 4
gpt4 key购买 nike

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

// 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)));

当我选择对过滤后的数据进行操作时,我想对代码路径进行单元测试。

问题:有没有办法绕过单元测试中的断言调用?
有些相当于在“断言失败”对话框中单击 OK=Continue

TIA

最佳答案

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

由于正确代码中的正确断言从不触发,没有办法测试断言触发。测试的前提是产生你的软件的一个可能的配置,并验证它的正确性;但是具有正确断言的正确代码从不具有触发断言的配置。

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

另请参阅此相关问题:

Debug.Assert vs Exception Throwing

关于c# - 有没有办法在代码中的 Debug.Assert() 之后继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4886790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com