绕过java构造函数创建类实例,可行否解决办法
绕过java构造函数创建类实例,可行否背景描述:要测试下面MyClass类中的func函数,但是MyClass没有默认构造函
绕过java构造函数创建类实例,可行否
背景描述:
要测试下面MyClass类中的func函数,但是MyClass没有默认构造函数:
Java codepublic class MyClass{ private OtherClass obj; public MyClass(OtherClass obj){ //OtherClass的构造比较麻烦,而其obj这个对下面func的测试没有帮助 this.obj = obj; .... } public void func(){ //要测试的函数 .... }}
由于上面的OtherClass的构造比较麻烦,而其obj这个对下面func的测试没有帮助,所以产生了绕过构造函数的想法;
具体已经有一种方法:通过反序列化的手段(具体比较复杂,有可能要涉及到对序列化文件进行修改的情况);这里想让大家出出主意,有没有更好的别的方法。
[解决办法]反序列化?不懂什么意思,帮顶吧
[解决办法]晕,每个类都有默认的构造函数,谁说MyClass没有?
[解决办法]如果这个类暂时用不到obj这个实例的话,自己写一个与obj初始化无关的构造方法不就行了?
[解决办法][解决办法]不想构造OtherClass,很简单啊
new MyClass(null) 不就可以了
[解决办法]我晕死。你不写构造函数不就行了。。。
[解决办法]需要这么麻烦吗?
如果func用不到obj,你直接传个null不就行了,当然,前提是你的MyClass构造函数不发生null异常
不知道LZ是怎么测试的?junit?
[解决办法]有方法吗,不清楚
关注中
[解决办法][解决办法]那就用 OtherClass 的子类做参数,前提OtherClass非final类
public SubOtherClass extends OtherClass{
public SubOtherClass(){}
}
[解决办法]你必须要让你的MyClass正确实例化。如果你的MyClass都没有正确实例化,你对它的测试还有什么意义呢?所以,你不要试图绕过构造函数,而是让它正确执行。11楼的兄弟已经给你指明了,NullObject处理这里问题非常合适。
[解决办法]学习一下。。帮顶。。。。。转点分。。。
[解决办法]当你写了在MyClass类里面构造了
public MyClass(OtherClass obj){
this.obj = obj;
....
}
这个构造函数的时候
如果你在别的地方用MyClass myClass = new MyClass();来实例化
则你必须在MyClass类里面加上public MyClass(){ }这构造函数
[解决办法]不能这样做,应为Java语言本省就是依靠构造函数来产生实例的
这是标准.
[解决办法]Java codepublic class MyClass4Test{ public static void func(){ //要测试的函数 //.... //copy MyClass#func() }}
[解决办法]
学习学习
[解决办法]