是不是每个assert语句都可以转换为Assert.IsTrue,因为根据定义,你断言某些东西是真还是假?
为什么测试框架会引入像AreEquals,IsNotNull,尤其是IsFalse这样的选项?我觉得我花了太多时间考虑在编写单元测试时使用哪种Assert。
答案 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