我有一个问题,我有一些代码,例如
public void a() {
Obj1 one = Obj1();
Obj2 two = Obj2();
one.b();
two.c();
}
我正在尝试调用 a()
方法,并且希望执行 b()
方法,但我想模拟 >c()
方法。
既然 Obj2 2
是在 a()
中声明的,那么最好的方法是什么?
最佳答案
两个选项:
- 您重新设计您的设计,使其更易于测试。例如,通过摆脱
new Obj2()
调用。相反,您可以将 Obj2 对象的工厂传递给该类;并使用它。工厂返回模拟对象;你很好。或者您研究一下其他依赖注入(inject)机制。 - 您转向 PowerMock(ito),它允许模拟调用
new
;如概述here例如。
我个人的两分钱:我建议选择选项 1 - 改进设计总是更好;而不是使用大的(丑陋的)PowerMock 锤子来“修复”设计问题。因此,一个简单的例子如下:
public class EnclosingClass {
private final Obj2Factory factory;
EnclosingClass(Obj2Factory factory) {
this.factory = factory;
}
void a() {
Ob2 two = factory.make();
}
关于java - 如何模拟下游方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44932666/