.NET单元测试框架中的冗余断言语句

时间:2010-06-15 21:33:56

标签: c# .net visual-studio unit-testing nunit

是不是每个assert语句都可以转换为Assert.IsTrue,因为根据定义,你断言某些东西是真还是假?

为什么测试框架会引入像AreEquals,IsNotNull,尤其是IsFalse这样的选项?我觉得我花了太多时间考虑在编写单元测试时使用哪种Assert。

5 个答案:

答案 0 :(得分:4)

如果您愿意,可以随时使用Assert.IsTrue。当断言失败时,差异为Assert.AreEqual等会给你一个更好的错误信息。

NUnit(可能还有其他框架)现在支持这样的语法:

Assert.That(foo, Is.Equal.To(bar))

答案 1 :(得分:4)

如果您有足够的额外代码,是的,几乎每个Assent.XXX都可以变成Assert.IsTrue来电。然而,有一些很难翻译,如投掷

Assert.Throws<ArgumentNullException>(() => x.TestMethod(null));

将其转换为Assert.IsTrue是可能的,但实际上并不值得付出努力。使用Throws方法要好得多。

答案 2 :(得分:2)

是,

AreEqual(obj1,obj2)基本上是Assert.IsTrue(obj1.Equals(obj2))。所以,我会说这是真的。

但也许他们为了可读性而引入了这些重载,每个例子都显然他们想要比较两个对象,或者检查一个值是否等于false。

答案 3 :(得分:1)

非常简单 - 让您的测试代码更强可读

哪个更具可读性

Assert.IsTrue(quantity > 0)

Assert.That(quantity, Is.GreaterThan( 0 ))

您认为第二种选择更具可读性吗?

答案 4 :(得分:0)

您可以使用名为Should的库编写框架无关的断言。它还有一个非常好的流利语法,如果你喜欢流畅的界面,可以使用它。我有一篇与之相关的博客文章。

http://nileshgule.blogspot.com/2010/11/use-should-assertion-library-to-write.html