为什么“Assert”类有这么多看似多余的方法?什么时候应该使用?

时间:2010-02-22 19:42:08

标签: c# unit-testing assert

所以我看到Assert有几十种似乎基本上做同样事情的方法。

Assert.IsFalse(     a == b );
Assert.IsTrue(      a != b );
Assert.AreNotEqual( a,   b );

为什么呢?它只是更明确吗?应该何时使用各种方法?是否有正式的最佳实践文档?

6 个答案:

答案 0 :(得分:8)

简短回答:为了便于阅读。

答案稍长:

您的测试也是代码,并且在意图方面与您正在测试的代码一样重要。因此,您希望尽可能清楚地使测试的目的。有时这意味着您使用IsFalse,有时这意味着使用IsTrue

答案 1 :(得分:8)

IsFalseIsTrue之间的差异是可读性。 AreNotEqual允许在测试失败时显示更好的错误消息。例如IsTrue只会告诉你答案应该是真的,而且确实是错误的。 AreNotEqual将显示在错误消息中进行比较的两个值。

答案 2 :(得分:4)

这三种方法有三个不同的具体目标。测试的目标是提供清晰的代码验证和验证。通过使用尽可能最清晰和最具体的方法,您可以使测试成为尽可能最小的测试,并且可以使用最具体,最清晰的含义。

这有助于因为它增加了清晰度 - 具体而言,您可以看到测试应该以更具声明性的方式执行,其中对于多个测试场景使用相同的方法,每个测试场景具有不同的含义,需要更多地了解代码本身,而不是测试的性质。

在这种情况下,第三个是(仅)适当的使用者。但是,如果你遇到这种情况,你会使用另一种情况,例如:

Assert.IsTrue( myClass.MethodThatReturnsTrue() );

您应该使用最清晰的方法来实现目标 - 如果您要检查两个值是否相等,请使用Assert.IsEqual,如果您检查布尔值以验证它是否为假,请使用{ {1}}。这使得错误报告有意义且易于理解。

答案 3 :(得分:1)

它使错误最容易阅读;使用与您的代码最匹配的那个。

在这种情况下,请使用#3。

答案 4 :(得分:1)

因为你可以重载==和!=,这就是原因。

答案 5 :(得分:1)

它被称为“流畅的界面”......并且在许多人的意见中使事情更具可读性。