尝试使用Mockito的间谍功能进行我的JUnit测试。我最初有一个班级:
public class App1 {
public String method1() {
sayHello();
}
public sayHello() {
Systems.out.println("Hello");
}
}
我的测试类中的所有内容都可以正常工作,并且模拟监视了上面的类:
@Test(expected = IOException.class)
public void testMethod1Failure(){
App1 a1 = spy(App1);
doThrow(IOException.class).when(a1).sayHello();
a1.method1();
}
但是在那之后,我不得不切换东西并将sayHello((方法放入另一个类中用作静态方法:
public class App1 {
public String method1() {
App2.sayHello();
}
}
public class App2 {
public static void sayHello() {
Systems.out.println("Hello");
}
}
在此更改之后,我原来的 JUnit 测试用例被破坏了,我不确定如何使用 Mockito 间谍来启动调用外部 App1 静态方法的 App2...有谁知道我该怎么做?提前致谢
Mockito不支持模拟静态代码。以下是一些处理它的方法:
- 使用
- PowerMockito 或类似的框架,如下所示:使用 Mockito 模拟静态方法。
- 重构将静态方法转换回实例方法的代码。正如你已经发现的,静态方法不容易进行单元测试。
- 如果执行有问题的实际静态方法成本低廉,那么只需调用它。