单元测试'SetDefaults()'方法

时间:2009-03-18 22:47:12

标签: unit-testing

我正在学习单元测试。我有一个“域对象”,除了保持状态(即Employee没有任何业务逻辑)之外没有太大作用。它有一个方法SetDefaults(),它只是用合理的值填充它的状态。一个简单的方法。

但是当我去单元测试这个方法时,我能想到的就是运行方法,然后检查每个字段是否应该是什么。喜欢(在C#中):

        [TestMethod()]
    public void SetDefaultsTest()
    {
        Employee target = new Employee();

        employee.SetDefaults();

        Assert.AreEqual(employee.Name, "New Employee");
        Assert.AreEqual(employee.Age, 30);
        // etc.
    }

在我的测试中复制SetDefaults()的整个功能感觉不对。我应该保持这种方法未经测试吗?问题是我想要一个测试,以确保当新属性添加到类时,它们也被添加到SetDefaults()方法。

3 个答案:

答案 0 :(得分:3)

琐碎的getter和setter有时候没有为它们编写单元测试。如果这就是SetDefaults()的全部内容,那么跳过它可能不会有什么坏处。

您要考虑测试的一件事是,在调用employee后,SetDefaults()实例的所有设置属性都不为空:

var nonNullProperties = new object[] { employee.Name, employee.Age, ... };
foreach (var property in nonNullProperties)
  Assert.IsNotNull(property);

这是有道理的,因为你真的只关心他们 设置为某个默认值,而不是他们是特定的值。

答案 1 :(得分:2)

这取决于您从该测试中获得的价值。不要仅仅为了测试而进行测试。但是,如果这些默认值非常重要,而不是更改,那么请继续。

许多测试涉及决定“嘿,这是否会让我的工作从长远来看更容易?”这些默认值是一直在变化,还是不变?默认值是非常复杂的,还是少数字符串和数字?这些默认值是否正确对客户有多重要?对其他开发人员来说,默认值是否正确有多重要?

测试可以做一百万件事,但如果不给那些关心它的人增加一些价值,那就不用担心了。如果您被要求自动测试所有代码的100%,那么阅读和讨论以下博客中提出的一些想法可能会使您的团队受益:

http://blog.jayfields.com/2009/02/thoughts-on-developer-testing.html http://msdn.microsoft.com/en-us/magazine/cc163665.aspx

否则,如果它没有增加太多价值或经常中断,我会说继续并将其遗漏。

答案 2 :(得分:1)

对我来说,这看起来是一个非常合理的单元测试。您正在提供一个简单的测试,用于检查调用该方法的结果。但是,它对任何新属性都没有帮助,因为现有的测试仍然会通过。也许您可以使用Reflection迭代对象的所有属性并检查它们是否为空?

同样SetDefaults()似乎是一种有点奇怪的方法。为什么不直接将新的Employee初始化为这些值?这样,另一个程序员就不会创建Employee并忘记致电SetDefaults()