例如,我有一个这样的类:
class Ex1{
Ex2 e = new Ex2();
Ex1(){
System.out.println("COnstructor of Ex1");
}
public int m1(){
int i = e.test();
return i;
}
}
class Ex2{
Ex2(){
//some code here, I dont want to execute this code
}
public int test(){
return 5;
}
}
我正在为Ex1 class
编写测试类,在这里我必须mock Ex2 class
测试类:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Ex1.class,Ex2.class})
class Ex1Test{
private static Ex1 ex;
private static Ex2 e;
@BeforeClass
public static void start(){
e = mock(Ex2.class);
PowerMock.whenNew(Ex2.class).withNoArguments().thenReturn(e);
ex1 = new Ex1();
}
但它不是嘲弄Ex2 class
对象,而是直接创建......
答案 0 :(得分:1)
您的问题是您创建了难以测试代码。
是的,可以使用Powermock来解决问题"那个问题。但问题是:您仍然创建了紧密耦合,难以测试的生产代码。简单的答案是:当你必须控制"您的对象,您可以直接在生产代码中调用 new 。
有两种方法可以防止这种情况:
当你这样做时,你不再需要Powermock了。
长话短说:在添加对Powermock的依赖之前;观看那些videos,并考虑如果不使用Powermock可能是更好的选择。