Java 如何使用模拟对象替换内部代码段中的原始对象?
我在尝试执行一些JUnit mockito测试时遇到了这个问题 为了便于理解我的问题,我将提供以下示例:Java 如何使用模拟对象替换内部代码段中的原始对象?,java,junit,mocking,mockito,Java,Junit,Mocking,Mockito,我在尝试执行一些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
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();
问题是,如何将B的run()方法中的“a”对象替换为“mockA”对象?通过这种方式,我可以从B.run()开始代码执行,也可以在代码执行过程中使用mock对象
任何帮助都将不胜感激!:P
有两个选项,而不是在
运行的内部创建新实例:
在构造函数中传递一个实例,如
class B {
private A a;
B(A a) {
this.a = a;
}
void run() {
a.test("something");
}
}
因此,您的测试代码将更改为
B b = new B(mockA);
b.run();
B b = new B();
b.setA(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(mockA);
b.run();
B b = new B();
b.setA(mockA);
b.run();
通常首选第二种方法。有两个选项,而不是在运行的内部创建新实例:
在构造函数中传递一个实例,如
class B {
private A a;
B(A a) {
this.a = a;
}
void run() {
a.test("something");
}
}
因此,您的测试代码将更改为
B b = new B(mockA);
b.run();
B b = new B();
b.setA(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(mockA);
b.run();
B b = new B();
b.setA(mockA);
b.run();
通常首选第二种方法