mik*_*igs 12 unit-testing assert mstest
我刚刚读完了Roy Osherove的"单元测试艺术",我正在努力坚持他在书中列出的最佳实践.其中一个最佳实践是不在测试方法中使用多个断言.这个规则的原因对我来说相当清楚,但它让我怀疑......
如果我有一个像这样的方法:
public Foo MakeFoo(int x, int y, int z)
{
Foo f = new Foo();
f.X = x;
f.Y = y;
f.Z = z;
return f;
}
Run Code Online (Sandbox Code Playgroud)
我是否真的必须编写单独的单元测试以声明Foo的每个单独属性是否使用提供的值进行初始化?在测试方法中使用多个断言真的很少见吗?
仅供参考:我正在使用MSTest.
编辑:感谢所有的回复.我想我最终将继续使用多个断言.在我的情况下,正在测试的行为是MakeFoo制作一个合适的Foo.因此断言每个属性都达到预期值就足够了.但是,如果设置其中一个属性存在条件,那么我将分别测试每个单独的结果.
我仍然不喜欢它....我喜欢每次测试一个断言的想法是你知道测试失败的确切原因.如果您解决了问题,那么测试将通过.有多个断言,您没有相同的保证.如果你修复了失败的断言所提到的问题,那么在测试中的下一次失败就没有什么可以阻止另一个断言了.如果断言被分开,那么你从一开始就知道两个失败.
最后,我不仅仅使用.Equals()的原因是因为在我的情况下,Foo是一个LINQ-To-SQL实体,它引入了一些不值得进入的并发症.
再次感谢.
Joh*_*web 16
每单元测试只测试一个概念就更为重要.
测试一个概念可能需要不止一个断言,所以不要过分担心断言的数量.当然,如果你最终得到大量的断言,你可能想退后一步,想想你真正在测试什么.
在这样的情况下,如果我试图对每个测试的一个断言严格,我将在Foo上声明相等,而不是它的组件.这促使我写了Foo.equals(),这通常是一件好事.但是我并不总是严格考虑每个测试的一个断言.看看对你有什么好处.
| 归档时间: |
|
| 查看次数: |
5105 次 |
| 最近记录: |