伪代码是这样的
rc = SomePublicClass.myPublicStaticFunc(arg)
public class SomePublicClass {
private SomePublicClass() {
}
public static int myPublicStaticFunc(arg) {
return 5;
}
}
Run Code Online (Sandbox Code Playgroud)
在 UT 这不起作用
verify(SomePublicClass, times(1)). myPublicStaticFunc();
Run Code Online (Sandbox Code Playgroud)
由于这是一个公共类,如何验证 myFunc 在单元测试中的 mockito 中被调用?如果 SomePublicClass 是一个模拟类,这可以工作。
自 Mockito 3.4 起,可以使用模拟静态方法。
请参阅拉取请求:Mockito #1013:定义并实现用于静态模拟的 API。
请注意,此功能可用的事实并不等同于建议使用它。它针对无法重构源代码的遗留应用程序。
话说回来:
测试静态方法何时不带参数:
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
);
}
Run Code Online (Sandbox Code Playgroud)
测试静态方法何时接受参数:
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())
);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2661 次 |
最近记录: |