Mockito for beginners
Table of Contents
Mockito for beginners:
Mockito is an open source testing framework, and it is a widely used for junit testing with mocking beans/repositories in frameworks such as spring mvc & spring boot. The framework allows the creation of test double objects in automated unit tests for the purpose of test-driven development or behavior-driven development. The framework’s name and logo are a play on mojitos, a type of drink.
How to Mock void method ?
doNothing().when(couponRepository).deleteAll(Mockito.any());
Note: deleteAll is a void method.
How to Mock public methods of a same class ?
NgDeveloper ngDeveloperSpy = Mockito.spy(new NgDeveloper()); when(ngDeveloperSpy.getAuthor()).thenReturn("Mirthbees");
Note: getAuthor() is the public method which we need to mock, so we have created a spy of a class then called getAuthor() method and mocked the response as “Mirthbees” using when and thenReturn.
How to test Controller & Service classes using PowerMock with Mockito ?
How to Mock Map in Mockito / PowerMock ?
when(couponServiceImpl.getCoupons(Mockito.anyMap())).thenReturn(couponsList); // couponsList - is the list constructed in the mock creator of your class. // here couponSerivceImpl is mocked like this, @Mock CouponServiceImpl couponServiceImpl;
How to Mock List in Mockito / PowerMock ?
when(couponServiceImpl.getCoupons(Mockito.anyList())).thenReturn("MyString"); // couponServiceImpl should be mocked at the top of the class like this. @Mock CouponServiceImpl couponServiceImpl;
How to return the mocked classes in cases like caching / any spring config testing / any BPMN testing scenario’s ?
MyCacheOrBPMNClassToReturn myCacheOrBPMNClassToReturn = Mockito.mock(MyCacheOrBPMNClassToReturn.class); when(couponServiceImpl.getCacheOrBPMNStuffs()).thenReturn(myCacheOrBPMNClassToReturn); // here too couponServiceImpl should be mocked like this at the top of the class @Mock CouponServiceImpl couponServiceImpl;
What is the recommended way to use Mockito ?
Mockito.doReturn(myListOrMapOrWhateverNeededToReturn).when(couponServiceImpl).getCoupons(Mockito.anyList()); // You can mock the couponServiceImpl either with @Mock at the top of the class or using Mockito.mock. CouponServiceImpl couponServiceImpl = Mockito.mock(CouponServiceImpl.class); (or) @Mock CouponServiceImpl couponServiceImpl;
What and all can not be mocked in Mockito ?
- We can not mock/stub/verify the final, private, equals() and hashcode() methods.
- We also won’t be able to mock and test any methods present inside the non-public classes.
How to enrich some value inside void method in Mockito ?
doAnswer( invocationOnMock -> { Coupon coupon = (Coupon) invocationOnMock.getArguments()[0]; // coupon is 0th argument so setting as 0 coupon.setStatus("published"); return null; }).when(mockCouponHelperUtility).enrichCoupon(any (Coupon.class), Mockito.any());
How to read property/xml files from src/test/resources folder in your junit test?
@SpringBootTest public class XmlPropertyRead{ @Test public void testXmlAttribute() throws Exception { Path relPath = Paths.get("src", "test", "resources", "my_sample_xml.xml"); String content = null; try { content =Files.lines(relPath).collect(Collectors.joining(System.lineSeparator())); System.out.println(content); } catch (IOException e) { e.printStackTrace(); } assertTrue(true); } }