NUnit Setup属性是代码味道吗?

时间:2018-01-25 11:54:07

标签: c# nunit

我编写了一组NUnit类,它们具有Setup和TearDown属性。然后我读到了这个:http://jamesnewkirk.typepad.com/posts/2007/09/why-you-should-.html。我可以理解作者在阅读单元测试时需要向上滚动和向下滚动的内容。但是,我也看到了Setup和TearDown的好处。例如,在最近的一个测试课中我做到了这一点:

private Product1 _product1;
private Product2 _product2;
private IList<Product> _products;

[SetUp]
public void Setup()
{
    _product1 = new Product();
    _product2 = new Product();
    _product = new List<Product>();
    _products.Add(_product1);
    _products.Add(_product2);
}

每次测试都使用_product1_product2_products。因此,似乎违反DRY将它们放入每种方法中。它们应该放在每种测试方法中吗?

1 个答案:

答案 0 :(得分:2)

这个问题非常主观,但我不相信这是代码味道。链接博客文章中的示例非常随意,并且未在每个测试中使用变量设置。如果您查看代码并且未使用SetUp中的变量,那么是的,它可能是代码味道。

如果您的测试分组良好,那么每个测试夹具将测试一组通常需要相同设置的功能。在这种情况下,DRY原则在我的书中胜出。詹姆斯在他的帖子中指出,他需要查看三种方法来查看数据的状态,但我会反驳说,测试方法中的设置代码太多会掩盖测试的目的。

在您的示例中复制设置代码也会使您的测试更难维护。如果您的Product课程在将来发生变化并需要额外的构造,那么您需要在每个测试中更改它,而不是在一个地方。为每个测试方法添加那么多设置代码也会使您的测试类非常长且难以扫描。

相关问题