伪代码是这样的
rc = SomePublicClass.myPublicStaticFunc(arg)
public class SomePublicClass {
private SomePublicClass() {
}
public static int myPublicStaticFunc(arg) {
return 5;
}
}
在UT这不起作用
verify(SomePublicClass, times(1)). myPublicStaticFunc();
由于这是一个公共类,如何验证 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(
SomePublicClass::myPublicStaticFunc, times(1));
}
测试静态方法何时接受参数:
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(
() -> SomePublicClass.myPublicStaticFunc(anyInt()), times(1));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)