根据SO的问题When should I use Debug.Assert()?和When to use assertion over exceptions in domain classes断言对开发很有用,因为“不可能”的情况可以很快发现.它似乎是常用的.据了解断言,在C#中,它们经常用于检查“不可能”值的输入变量.
为了尽可能保持单元测试的简洁和隔离,我使用null和“不可能”的虚拟输入(像空字符串)进行类和方法的提供.
这些测试是明确记录的,它们不依赖于某些具体的输入.注意:我正在练习Meszaros的“xUnit测试模式”描述为Minimal Fixture.
这就是这样的一点:如果我有一个断言来保护这些投入,他们会炸毁我的单位测试.
我喜欢断言编程的想法,但另一方面,我不需要强制它.目前我无法想到Debug.Assert()的任何用途.也许有我想念的东西?你有什么建议,他们真的有用吗?也许我只是高估了断言的有用性?或者也许我的测试方式需要重新审视?
编辑:Best practice for debug Asserts during Unit testing是非常相似的,但它并没有回答这困扰我的问题:我应该关心Debug.Assert()在C#如果我测试像我已经描述了?如果是,在哪种情况下他们真的有用吗?在我目前的观点中,单元测试会使Debug.Assert()不必要.
另一点:如果你真的认为这是一个重复的问题,只是发表一些评论.
解决方法
简而言之,它们仅仅用于单元测试的不同目的.他们在那里抓到错误,在写单元测试时,它们本质上不会被做出.
我建议保留它们,因为它们提供了程序员错误的另一个级别的保护.
它们也是本地的错误保护机制,而单元测试则在被测代码的外部.在压力下“无意间”禁用单元测试比在一段代码中禁用所有断言和运行时检查更容易.