1. Mock private member of a class
Example to mock a private member "treeTypeProvider" of class CustomProvider.java
@InjectMocks
CustomProvider provider;
Field privateField = CustomProvider.class.getDeclaredField("treeTypeProvider");
privateField.setAccessible(true);
privateField.set(provider, treeTypeProvider);
2. Mock private method of a class
Ideally, you should avoid mocking a private method and coverage should be achieved through the public method that uses the particular private method.
Example to mock a private method "getTypeProvider" of class CustomProvider.java
Class<?>[] params = new Class<?>[]{ParameterOne.class, ParameterTwo.class};
Field privateMethod = CustomProvider.class.getDeclaredMethod("getTypeProvider", params);
privateMethod.setAccessible(true);
privateMethod.invoke(provider, parameterOne, parameterTwo);
3. Mocking a Static class
Make sure you mock a Static class with a try-with-resources. Not doing so will affect Junit execution of other related classes using this Static class somewhere else in other Junit class.
try (MockedStatic<SampleUtils> utils = Mockito.mockStatic(SampleUtils.class)) {
utils.when(() -> SampleUtils.testMethod(node)).thenReturn(mockedNode);
......
......
}
4. Mocking object construction
Example to mock a construction statement like:
DocsProcessor processor = new DocsProcessor();
Mock it like below:
try (MockedConstruction< DocsProcessor > processor = Mockito.mockConstruction(DocsProcessor.class)) {
// Call any method that calls the DocsProcessor class constructor
......
......
// Verify that constructor was called once
assertEquals(1, processor.constructed().size());
}
No comments:
Post a Comment