Raz*_*zer 36 c# nunit unit-testing
更喜欢什么:
Assert.That(obj.Foo, Is.EqualTo(true))
Run Code Online (Sandbox Code Playgroud)
要么
Assert.True(obj.Foo)
Run Code Online (Sandbox Code Playgroud)
对我来说,两个断言都是等价的,那么哪一个应该是首选的?
das*_*ght 19
在这种特殊情况下,没有区别:你会看到大致相同细节水平的输出(即它告诉你预期要评估的东西已被true
评估false
).同样如此
Assert.IsTrue(obj.Foo);
Run Code Online (Sandbox Code Playgroud)
和
Assert.That(obj.Foo, Is.True);
Run Code Online (Sandbox Code Playgroud)
您的团队应该选择一种断言方式,并在所有测试中坚持使用.如果您的团队喜欢这种Assert.That
风格,那么您应该使用Assert.That(obj.Foo, Is.True)
.
这有点挑剔,但恕我直言,我认为在这种情况下Assert.That
不必要地冗长,因此可以被视为混淆。换句话说,Assert.True
更干净、更直接、更容易阅读和理解。
为了更加挑剔,我建议使用Assert.IsTrue
API,而不是因为Assert.True
,恕我直言,IsTrue
“阅读”得更好。
好的,您在CI服务器上执行了测试套件,不幸的是,其中一个失败了。您打开日志并查看下一条消息
Run Code Online (Sandbox Code Playgroud)BusinessLogicTests.LoginTests.UserAutoLoginTests failed: expected true but was false
现在,如果您看到的所有信息都是,AutoLoginTests bool中的某个地方应该是正确的,但收到的是错误的,那么您将如何弄清楚该测试到底出了什么问题?现在,您需要转到测试用例的源文件,看看什么断言失败了。你看
Assert.True(obj.Foo)
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,仅在1小时前开发了此模块,仍然很难分辨出问题所在。您仍然需要更深入地研究测试源,甚至可能是生产源,甚至调试您的代码,以便最终弄清楚,您在函数调用中拼写了错误的变量,或者使用了错误的谓词来过滤注册用户。因此,您阻止了测试的即时反馈,这非常有价值。
我的观点是,断言的流畅程度(也很相关)都无关紧要,但是在测试失败的情况下您会暴露哪些信息,即使您工作了很长时间也能很快获得失败的根本原因以前有这个功能
归档时间: |
|
查看次数: |
38511 次 |
最近记录: |