Mockito doNothing Mockito.mockStatic
Mockito doNothing with Mockito.mockStatic
我正在使用 Mockito 以及 mockito-inline 来模拟静态方法。我正在尝试将 doNothing
或类似行为应用于静态 void 方法。以下解决方法有效,但我认为应该有更方便的方法来用更少的代码实现这一点。
try (MockedStatic<UtilCalss> mock = Mockito.mockStatic(UtilCalss.class)) {
mock.when(() -> UtilCalss.staticMethod(any()))
.thenAnswer((Answer<Void>) invocation -> null);
}
如果它是一个非静态方法,我们可以简单地做:
doNothing().when(mock).nonStaticMethod(any());
但我想对静态方法做同样的事情。
您不需要存根该调用。
doNothing
是在 mock 上调用的 void
方法的默认行为。
mockito-inline 包括 mockito-core :
<!-- Mockito-inline include Mockito-code in same version - Useful for Mock static method -->
<!-- See https://asolntsev.github.io/en/2020/07/11/mockito-static-methods/ -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>3.6.28</version>
</dependency>
如果您正在测试静态方法 return 什么都不要 => 不要使用 mock.when => 只需执行您要测试和验证的方法即可:
try (MockedStatic<UtilClass> mock = Mockito.mockStatic(UtilClass.class)) {
mock.when(() -> UtilClass.staticMethod(any()))
.thenAnswer((Answer<Void>) invocation -> null);
App.main(null); // example : I'm testing main method from App class
mock.verify(UtilClass::staticMethod); // I verify static method from UtilClass was called.
}
资源:
- Mocking static methods with Mockito
- https://github.com/mockito/mockito/issues/2027 - cf rimuln 2020 年 10 月 16 日评论
我正在使用 Mockito 以及 mockito-inline 来模拟静态方法。我正在尝试将 doNothing
或类似行为应用于静态 void 方法。以下解决方法有效,但我认为应该有更方便的方法来用更少的代码实现这一点。
try (MockedStatic<UtilCalss> mock = Mockito.mockStatic(UtilCalss.class)) {
mock.when(() -> UtilCalss.staticMethod(any()))
.thenAnswer((Answer<Void>) invocation -> null);
}
如果它是一个非静态方法,我们可以简单地做:
doNothing().when(mock).nonStaticMethod(any());
但我想对静态方法做同样的事情。
您不需要存根该调用。
doNothing
是在 mock 上调用的 void
方法的默认行为。
mockito-inline 包括 mockito-core :
<!-- Mockito-inline include Mockito-code in same version - Useful for Mock static method -->
<!-- See https://asolntsev.github.io/en/2020/07/11/mockito-static-methods/ -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>3.6.28</version>
</dependency>
如果您正在测试静态方法 return 什么都不要 => 不要使用 mock.when => 只需执行您要测试和验证的方法即可:
try (MockedStatic<UtilClass> mock = Mockito.mockStatic(UtilClass.class)) {
mock.when(() -> UtilClass.staticMethod(any()))
.thenAnswer((Answer<Void>) invocation -> null);
App.main(null); // example : I'm testing main method from App class
mock.verify(UtilClass::staticMethod); // I verify static method from UtilClass was called.
}
资源:
- Mocking static methods with Mockito
- https://github.com/mockito/mockito/issues/2027 - cf rimuln 2020 年 10 月 16 日评论