Reputation: 13811
I'm using Mockito, along with mockito-inline for mocking static methods. I'm trying to apply doNothing
or similar behavior, to a static void method. The following workaround work, but I think that there should have a more convenient way to achieve this with less code.
try (MockedStatic<UtilCalss> mock = Mockito.mockStatic(UtilCalss.class)) {
mock.when(() -> UtilCalss.staticMethod(any()))
.thenAnswer((Answer<Void>) invocation -> null);
}
If it's a non-static method, we could simply do:
doNothing().when(mock).nonStaticMethod(any());
But I want to do the same for a static method.
Upvotes: 21
Views: 37179
Reputation: 26064
You don't need to stub that call.
doNothing
is a default behaviour of a void
method called on a mock.
Example:
Class under test:
public class UtilClass {
public static void staticMethod(String data) {
System.out.println("staticMethod called: " + data);
}
}
Test code:
public class UtilClassTest {
@Test
void testMockStaticForVoidStaticMethods() {
try (MockedStatic<UtilClass> mockStatic = Mockito.mockStatic(UtilClass.class)) {
UtilClass.staticMethod("inMockStaticScope");
}
UtilClass.staticMethod("outOfMockStaticScope");
}
}
Output:
staticMethod called: outOfMockStaticScope
Upvotes: 29
Reputation: 570
mockito-inline include 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>
And if static method you are testing return nothing => don't use mock.when => just execute the method you want to test and verify :
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.
}
resources :
Upvotes: 9