Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 单元测试a';SetDefaults()';方法_Unit Testing - Fatal编程技术网

Unit testing 单元测试a';SetDefaults()';方法

Unit testing 单元测试a';SetDefaults()';方法,unit-testing,Unit Testing,我正在学习单元测试。我有一个“域对象”,它除了保持状态(即没有任何业务逻辑的Employee)之外没有什么作用。它有一个方法SetDefaults(),它只是用合理的值填充它的状态。一个简单的方法 但是当我去单元测试这个方法时,我所能想到的就是运行这个方法,然后检查每个字段是否都是它应该是的。比如(在C#中): 在我的测试中复制SetDefaults()的整个功能感觉是错误的。我应该不测试这个方法吗?问题是,我需要一个测试来确保在将新属性添加到类中时,它们也会添加到SetDefaults()方法

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

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


在我的测试中复制SetDefaults()的整个功能感觉是错误的。我应该不测试这个方法吗?问题是,我需要一个测试来确保在将新属性添加到类中时,它们也会添加到SetDefaults()方法中。

普通的getter和setter有时没有为它们编写单元测试。如果SetDefaults()就是这么做的,那么跳过它可能不会有什么坏处

您想考虑的一件事是,在调用<代码> SEDDEFACTS()/<代码>:

之后,<代码>雇员实例的所有属性都没有NULL。
这是有道理的,因为您实际上只关心它们被设置为某个默认值,而不是设置为某个特定值。

这取决于您从该测试中得到的值。不要仅仅为了测试而测试。然而,如果这些默认值必须正确,而不是改变,那么就直接去做

很多测试都涉及到决定“嘿,从长远来看,这会让我的工作更轻松吗?”这些默认值是一直在改变,还是保持不变?默认值是非常复杂的,还是只有一小撮字符串和数字?这些默认值是否正确对客户有多重要?默认值是否正确对其他开发人员有多重要

这个测试可以做很多事情,但是如果它不能为关心它的人增加一些价值,那么就不要担心它。如果您被要求对所有代码进行100%的自动化测试,那么阅读和讨论以下博客中的一些想法可能会对您的团队有所帮助:


否则,如果它没有增加太多的价值或经常出现故障,我会说继续进行并忽略它。

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


另外,
SetDefaults()
似乎有点奇怪。为什么不将新的
员工
初始化为这些值呢?这样,就不会有另一个编码员创建一个
员工
而忘记调用
SetDefaults()

的风险,它确实会在构造函数中被调用,但也会作为一个公共方法保留,以防需要对现有对象调用它您可能需要一个测试在创建员工后立即检查默认值,第二个测试创建员工,将所有值设置为非默认值,然后调用SetDefaults()并检查它们是否正确重置。我明白您的意思。作为重构的一种形式,从第二个测试调用第一个测试方法可以吗?我感觉正确,但我仍然不确定重构测试代码的程度。一般来说,我尽量避免过多地重构单元测试,单元测试应该尽可能简单明了,即使这意味着重复代码。这使维护程序员能够非常快速地了解测试失败的原因。谢谢,Jay Fields链接中充满了有趣的信息。
        [TestMethod()]
    public void SetDefaultsTest()
    {
        Employee target = new Employee();

        employee.SetDefaults();

        Assert.AreEqual(employee.Name, "New Employee");
        Assert.AreEqual(employee.Age, 30);
        // etc.
    }
var nonNullProperties = new object[] { employee.Name, employee.Age, ... };
foreach (var property in nonNullProperties)
  Assert.IsNotNull(property);