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

如何设置私有构造函数?

如何解决《如何设置私有构造函数?》经验,为你挑选了1个好方法。

如果构造函数是私有的(.NET),如何设置单元测试?

这是我的班级:

public class Class2
{
    // Private constructor.
    private Class2()
    {
    }

    public static Class2 getInstance()
    {

        if (x == null)
        {
            x= new Class2();
        }

        return x;
    }
}

这是我的单元测试:

[TestFixture]
public class Class2Tester
{
    private Class2 test;

    [SetUp()]
    public void SetUp()
    {
        // I cant do this. How should I setup this up?
        test = new Class2();
    }
}

jonathan.con.. 5

答案是:你没有.不是因为你不能,而是因为你不应该.

通过使构造函数成为私有,您说它的行为不是该类的公共API的一部分.在这种情况下,它的行为要么a)不影响类的公共API,这意味着它不需要进行测试.b)更有可能影响该类的公共API,在这种情况下,围绕该公共API而不是黑盒构造函数编写测试.



1> jonathan.con..:

答案是:你没有.不是因为你不能,而是因为你不应该.

通过使构造函数成为私有,您说它的行为不是该类的公共API的一部分.在这种情况下,它的行为要么a)不影响类的公共API,这意味着它不需要进行测试.b)更有可能影响该类的公共API,在这种情况下,围绕该公共API而不是黑盒构造函数编写测试.


不要迂腐.在单元测试中,通过私有构造函数创建以将测试与通常用于创建对象的工厂方法分离是可以的.
个人喜好,我想.通常,我的默认构造函数没有任何实际代码,因此没有什么可以破解.工厂方法只是创建一个空对象并分配属性.从工厂方法中解耦允许我只设置被测对象的那些部分.
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有