当我尝试执行一些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()开始代码执行,并且还可以利用代码执行过程中的mock对象。
任何帮助将不胜感激! :P
有几个选项,而不是在run
中创建A的新实例:
class B {
private A a;
B(A a) {
this.a = a;
}
void run() {
a.test("something");
}
}
所以你的测试代码将改为
B b = new B(mockA);
b.run();
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();
通常第二种方法是优选的。