【发布时间】:2009-05-04 19:54:36
【问题描述】:
我已经准备好麦康奈尔的“Code Complete”已经有一段时间了。现在我在 Hunt & Thomas 的“The Pragmatic Programmer”中再次阅读它:使用断言! 注意:不是单元测试断言,我的意思是Debug.Assert()。
遵循 SO 问题 When should I use Debug.Assert()? 和 When to use assertion over exceptions in domain classes 断言对开发很有用,因为可以很快找到“不可能”的情况。而且它们似乎很常用。据我了解断言,在 C# 中,它们通常用于检查输入变量的“不可能”值。
为了尽可能保持单元测试的简洁和隔离,我使用nulls 和“不可能”的虚拟输入(如空字符串)来提供类和方法。
此类测试是明确记录的,它们不依赖于某些特定输入。 注意:我正在练习 Meszaros 的“xUnit 测试模式”所描述的 Minimal Fixture。
这就是重点:如果我有一个断言来保护这些输入,它们会破坏我的单元测试。
我喜欢断言式编程的想法,但另一方面我不需要强制它。目前我想不出Debug.Assert() 有什么用处。也许我想念什么?你有什么建议可以真正有用吗?也许我只是高估了断言的有用性?或者也许我的测试方式需要重新审视?
编辑:Best practice for debug Asserts during Unit testing 非常相似,但它没有回答困扰我的问题:如果我像我描述的那样进行测试,我是否应该关心 C# 中的Debug.Assert()?如果是,它们在什么情况下真的有用?在我目前的观点中,这样的单元测试将使Debug.Assert() 变得不必要。
另外一点:如果你真的这么认为,这是一个重复的问题,只需发表一些评论。
【问题讨论】:
-
请注意,Visual Studio 的测试框架不将 Debug.Assert 失败视为单元测试失败。
标签: c# unit-testing