Tuesday, November 5, 2024

Junit Mocking Guide

 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

CDN | Clearing Cloudflare cache

In order to clear Cloudflare cache automatically via code, follow below steps: 1. Develop Custom TransportHandler Develop a custom Trans...