所以我看到Assert有几十种似乎基本上做同样事情的方法。
Assert.IsFalse( a == b );
Assert.IsTrue( a != b );
Assert.AreNotEqual( a, b );
为什么呢?它只是更明确吗?应该何时使用各种方法?是否有正式的最佳实践文档?
答案 0 :(得分:8)
简短回答:为了便于阅读。
答案稍长:
您的测试也是代码,并且在意图方面与您正在测试的代码一样重要。因此,您希望尽可能清楚地使测试的目的。有时这意味着您使用IsFalse
,有时这意味着使用IsTrue
。
答案 1 :(得分:8)
IsFalse
和IsTrue
之间的差异是可读性。 AreNotEqual
允许在测试失败时显示更好的错误消息。例如IsTrue
只会告诉你答案应该是真的,而且确实是错误的。 AreNotEqual
将显示在错误消息中进行比较的两个值。
答案 2 :(得分:4)
这三种方法有三个不同的具体目标。测试的目标是提供清晰的代码验证和验证。通过使用尽可能最清晰和最具体的方法,您可以使测试成为尽可能最小的测试,并且可以使用最具体,最清晰的含义。
这有助于因为它增加了清晰度 - 具体而言,您可以看到测试应该以更具声明性的方式执行,其中对于多个测试场景使用相同的方法,每个测试场景具有不同的含义,需要更多地了解代码本身,而不是测试的性质。
在这种情况下,第三个是(仅)适当的使用者。但是,如果你遇到这种情况,你会使用另一种情况,例如:
Assert.IsTrue( myClass.MethodThatReturnsTrue() );
您应该使用最清晰的方法来实现目标 - 如果您要检查两个值是否相等,请使用Assert.IsEqual
,如果您检查布尔值以验证它是否为假,请使用{ {1}}。这使得错误报告有意义且易于理解。
答案 3 :(得分:1)
它使错误最容易阅读;使用与您的代码最匹配的那个。
在这种情况下,请使用#3。
答案 4 :(得分:1)
因为你可以重载==和!=,这就是原因。
答案 5 :(得分:1)
它被称为“流畅的界面”......并且在许多人的意见中使事情更具可读性。