尝试使用 Mockito 的 spy 功能进行我的 JUnit 测试。我原来有一个类:
public class App1 {
public String method1() {
sayHello();
}
public sayHello() {
Systems.out.println("Hello");
}
}
我的测试类中的所有内容都可以在上面的类中使用 mockito spy 正常工作:
@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 spy 启动调用外部 App2 静态方法的 App1...有人知道我该怎么做吗?提前致谢
最佳答案
Mockito 不支持模拟静态代码。以下是一些处理方法:
- 按照此处的建议使用 PowerMockito 或类似框架:Mocking static methods with Mockito .
- 重构您的代码,将静态方法转换回实例方法。正如您所发现的,静态方法不容易进行单元测试。
- 如果执行有问题的实际静态方法成本低廉,那么只需调用它即可。
关于java - 在一个类中使用 Mockito spy 从另一个类调用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43196314/