当前位置:  开发笔记 > 编程语言 > 正文

如何对不可变类构造函数进行单元测试?

如何解决《如何对不可变类构造函数进行单元测试?》经验,为你挑选了1个好方法。

我有一个不可变的类,其中包含一些在构造函数执行期间设置的私有字段.我想对这个构造函数进行单元测试,但我不确定这种情况下的"最佳实践".

简单的例子

这个类在Assembly1中定义:

public class Class2Test
{
    private readonly string _StringProperty;

    public Class2Test()
    {
        _StringProperty = ConfigurationManager.AppSettings["stringProperty"];
    }
}

此类在Assembly2中定义:

[TestClass]
public class TestClass
{
    [TestMethod]
    public void Class2Test_Default_Constructor()
    {
        Class2Test x = new Class2Test();
        //what do I assert to validate that the field was set properly?
    }
}

编辑1:我已经用一个潜在的解决方案回答了这个问题,但我不确定这是否是"正确的方法".因此,如果您认为自己有更好的想法,请发布.

这个例子不值得测试,但假设构造函数有一些更复杂的逻辑.是避免测试构造函数的最佳方法,只是假设它对类的方法的所有测试都有效吗?

编辑2:看起来我做的样本有点简单.我已经用更合理的情况更新了它.



1> Matt Hinze..:

没什么,除非你使用那个领域.您不希望通过测试进行过度规范.换句话说,不需要测试赋值运算符是否有效.

如果您在方法或其他内容中使用该字段,请调用该方法并对其进行断言.

编辑:

假设构造函数有一些更复杂的逻辑

您不应该在构造函数中执行任何逻辑.

编辑2:

public Class2Test()
{
     _StringProperty = ConfigurationManager.AppSettings["stringProperty"];
}

不要那样做!=)您的简单单元测试现在已成为集成测试,因为它取决于多个类的成功操作.编写一个处理配置值的类.WebConfigSettingsReader可以是名称,它应该封装ConfigurationManager.AppSettings调用.将该SettingsReader类的实例传递给构造函数Class2Test.然后,在您的单元测试中,您可以模拟WebConfigSettingsReader并对您可能对其进行的任何调用进行响应.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有