背景描述:
要测试下面MyClass类中的func函数,但是MyClass没有默认构造函数:public class MyClass{
    private OtherClass obj;
    public MyClass(OtherClass obj){ //OtherClass的构造比较麻烦,而其obj这个对下面func的测试没有帮助
        this.obj = obj;
        ....
    }    public void func(){  //要测试的函数
        ....
    }
}
由于上面的OtherClass的构造比较麻烦,而其obj这个对下面func的测试没有帮助,所以产生了绕过构造函数的想法;
具体已经有一种方法:通过反序列化的手段(具体比较复杂,有可能要涉及到对序列化文件进行修改的情况);这里想让大家出出主意,有没有更好的别的方法。

解决方案 »

  1.   

    晕,每个类都有默认的构造函数,谁说MyClass没有?
      

  2.   

    如果这个类暂时用不到obj这个实例的话,自己写一个与obj初始化无关的构造方法不就行了?
      

  3.   

    不想构造OtherClass,很简单啊
    new MyClass(null) 不就可以了
      

  4.   

    需要这么麻烦吗?
    如果func用不到obj,你直接传个null不就行了,当然,前提是你的MyClass构造函数不发生null异常
    不知道LZ是怎么测试的?junit?
      

  5.   

    在一个类中,如果开发者没有定义构造函数,那么系统将默认一个无参的构造函数。
    如果开发者写了有参的构造函数,并且没有写无参的构造函数,此时,该类就没有无参的构造函数了。lz,如果obj不容易构造,且对func()来说又没有用处,那就给构造函数一个null吧。如7楼所述
      

  6.   


    是Junit测试,如果传入null会发生相关的异常,而且前提是不能修改原来的类
      

  7.   

    那就用 OtherClass 的子类做参数,前提OtherClass非final类
    public SubOtherClass extends OtherClass{
        public SubOtherClass(){} }
      

  8.   

    你必须要让你的MyClass正确实例化。如果你的MyClass都没有正确实例化,你对它的测试还有什么意义呢?所以,你不要试图绕过构造函数,而是让它正确执行。11楼的兄弟已经给你指明了,NullObject处理这里问题非常合适。
      

  9.   


    SubOtherClass的构造函数照样要实现父类的构造函数;还是回到原来的问题
      

  10.   

    当你写了在MyClass类里面构造了
    public MyClass(OtherClass obj){ 
            this.obj = obj;
            ....
        }
    这个构造函数的时候
    如果你在别的地方用MyClass myClass = new MyClass();来实例化
    则你必须在MyClass类里面加上public MyClass(){ }这构造函数
      

  11.   

    不能这样做,应为Java语言本省就是依靠构造函数来产生实例的     这是标准.
      

  12.   

    public class MyClass4Test{    public static void func(){  //要测试的函数
            //....
            //copy MyClass#func()
        }
    }权宜的做法,不推荐,不过楼主那样的测试本身就不推荐
      

  13.   

    EasyMock 使用方法与原理剖析: http://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/