我试图将一个孩子模拟注入我的Main.class,它似乎没有用。 (使用带有依赖关系的junit的powermock 1.7.0)
验证说我的模拟对象没有互动。无法弄清楚原因。
这是我的Main.class:
public class Main {
private Child child;
public Main(){ }
public void setChild(Child child){
this.child = child;
}
public void play(){
child = new Child();
child.setNumber(50);
System.out.println(child.getNumber());
}
}
这是我的Child.class:
public class Child {
private int number;
public void setNumber(int number){
this.number = number;
}
public int getNumber(){
return number;
}
}
这是我的Test.class:
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Child.class, Main.class})
public class MainTest {
private Child child;
private Main main;
@Test
public void testMain(){
main = new Main();
main.play();
Mockito.verify(child).getNumber();
}
@Before
public void setup(){
child = mock(Child.class);
when(child.getNumber()).thenReturn(10);
}
}
答案 0 :(得分:1)
您在测试中创建的模拟实际上从未使用过,因为每次在其上调用 play()时,Main对象都会创建一个新的Child对象。
您想要的是告诉生产代码使用模拟子实例的方法,例如:通过二传手。
主要强>
public void play(){
// child = new Child(); // do not create a new instance each time
child.setNumber(50);
System.out.println(child.getNumber());
}
<强> MainTest 强>
@Test
public void testMain(){
main = new Main();
main.setChild(child); // tell it to use the mock
main.play();
Mockito.verify(child).getNumber();
}