您好:通常您使用模拟(Java代理)来替换类中的对象。Java,实例替换而不是模拟
例如:
public class ClassA{
public ClassB realObjectB;
public ClassC realObjectC;
public void Method1(){
realObjectC = new ClassC();
realObjectB = new ClassB(realObjectC);
}
...
...
}
public class ClassB {
public void ParticularInhereitedMethod(){
many dependency objects involved...
}
}
当然
,ClassB的和ClassC有很多其他的依赖,例如连接池。
当我做测试,我可以这样做:
public class Mock extends ClassB{
@override
public class ParticularInhereitedMethod(){
Make clean codes, no dependency.
}
}
在测试应用程序:
public class MainClass{
public static void main(String[] args){
ClassA a = new ClassA();
ClassM m = new Mock();
a.realObjectB = m;
manipulate m;
}
}
这是上面的方法在实际的测试工作?为什么我必须使用Java代理(字节代码替换)?
我认为你在混淆模拟对象的概念和一些库实现它们的方式。 模拟对象正是您在代码中显示的内容,并且您没有使用Java代理。他们工作。 有一些模拟库在生成模拟对象时非常强大。这些可能使用java代理或类似的东西来建立这些对象。 – Jochen
我的方法错了还是对吗?我必须使用mockito还是使用以下两个答案建议的依赖注入? – user84592