伪代码是这样的
rc = SomePublicClass.myPublicStaticFunc(arg)
public class SomePublicClass {
private SomePublicClass() {
}
public static int myPublicStaticFunc(arg) {
return 5;
}
}
在 UT 这不起作用verify(SomePublicClass, times(1)). myPublicStaticFunc();
由于这是一个公共(public)类,如何验证 myFunc 在单元测试中的 mockito 中被调用?如果 SomePublicClass 是一个模拟类,这可以工作。
最佳答案
自 Mockito 3.4 起,可以使用模拟静态方法。
查看拉取请求:Mockito #1013: Defines and implements API for static mocking.
请注意,此功能可用的事实并不等同于建议使用它。它针对无法重构源代码的遗留应用程序。
话说回来:
测试静态方法何时不带参数:
try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) {
dummyStatic.when(SomePublicClass::myPublicStaticFunc)
.thenReturn(5);
// when
System.out.println(SomePublicClass.myPublicStaticFunc());
//then
dummyStatic.verify(
times(1),
SomePublicClass::myPublicStaticFunc
);
}
测试静态方法何时接受参数:try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) {
dummyStatic.when(() -> SomePublicClass.myPublicStaticFunc(anyInt()))
.thenReturn(5);
// when
System.out.println(SomePublicClass.myPublicStaticFunc(7));
//then
dummyStatic.verify(
times(1),
() -> SomePublicClass.myPublicStaticFunc(anyInt())
);
}
关于java - 如何验证使用 mockito 调用公共(public)类的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63006056/