相关疑难解决方法(0)

在单元测试中有多个断言是不好的做法吗?

在单元测试中有多个断言是不好的做法吗?有关系吗?

unit-testing assert

43
推荐指数
4
解决办法
2万
查看次数

在单元测试中多个断言是坏的吗?即使链接?

在这个单元测试中检查这么多东西有什么问题吗?:

ActualModel = ActualResult.AssertViewRendered()        // check 1
                          .ForView("Index")            // check 2
                          .WithViewData<List<Page>>(); // check 3

CollectionAssert.AreEqual(Expected, ActualModel);      // check 4
Run Code Online (Sandbox Code Playgroud)

此测试的主要目标是验证返回正确的视图(检查2)并且它包含正确的数据(检查4).

我可以通过将其分成多个测试来获得任何收益吗?我一切都是为了做正确的事情,但如果它没有实际价值我就不会分手了.

我对单元测试很陌生,所以请保持温和.

c# unit-testing mstest asp.net-mvc-2

40
推荐指数
4
解决办法
2万
查看次数

单元测试中的多个断言

我刚刚读完了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实体,它引入了一些不值得进入的并发症.

再次感谢.

unit-testing assert mstest

12
推荐指数
2
解决办法
5105
查看次数

标签 统计

unit-testing ×3

assert ×2

mstest ×2

asp.net-mvc-2 ×1

c# ×1