当我尝试执行一些 JUnit mockito 测试时,我遇到了这个问题。
为了方便理解我的问题,我将在下面提供一个示例:
Class A {
public String test(String para1) {
//...do whatever stuff
return para1;
}
}
Class B {
public void run() {
A a = new A();
String result = a.test("test");
System.out.println(result);
}
}
when(mockA.test(anyString()).thenReturn("mockResult");
A mockA = mock(A.class);
//Instead of doing mockA.test(), I do the following:
B b = new B();
b.run();
问题是,如何用“mockA”对象替换 B 的 run() 方法中的“a”对象?这样我就可以从 b.run() 开始执行代码并在代码执行过程中利用模拟对象。
任何帮助将不胜感激! :P
最佳答案
有几个选项可以代替在 run
中创建 A 的新实例:
在构造函数中传递 A 的实例,例如
class B { private A a; B(A a) { this.a = a; } void run() { a.test("something"); } }
所以你的测试代码将更改为
B b = new B(mockA); b.run();
创建 setter 方法:
class B { private A a; void setA(A a) { this.a = a; } void run() { a.test("something"); } }
所以你的测试代码将更改为
B b = new B(); b.setA(mockA); b.run();
通常首选第二种方法。
关于java - 如何使用模拟对象替换内部代码部分中的原始对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48070184/