Mockito Hints
Index
- Setup method calls on Autowired interfaces
- Verify generic method calls
- Matchers
- Resetting a specific mock for every JUnit test
- Mockito, JUnit and Spring Boot
Setup method calls on Autowired interfaces
Given an autowired item inside a test running with the SpringJUnit4ClassRunner follow this simple syntax.
Instead of the Mockito.any, is possible to insert directly the value of the object.
@Autowired
private RestOperations restTemplate;
@Test
private void testSomething()
{
...
Mockito.when(restTemplate.postForObject(
Mockito.any(String.class),
Mockito.any(Map.class),
Mockito.any(Class.class)
)).thenReturn(response);
}
Verify generic method calls
The matchers can be used also to verify if the method was called (as the calls on autowired)
@Test
private void testSomething()
{
...
verify(restTemplate, times(1)).postForObject(
Mockito.any(String.class),
Mockito.any(Map.class),
Mockito.any(Class.class));
}
Matchers
The matchers can be expressed in various ways. In case a matcher should match a template based
value, then the square brackets syntax should be used!!
Mockito.any(String.class); Mockito.<String>any(); Mockito.anyString(); Mockito.anyInt();
To match for equality differences, etc
Mockito.eq("Value to verify against");
Resetting a specific mock for every JUnit test
The specific item that had been mocked can be resetted to initial state
@Autowired
private RestOperations restTemplate;
@Before
public void initializeTarget() {
...
Mockito.reset(restTemplate);
}
Mockito, JUnit and Spring Boot
It is possible to use the autowired annotation as with spring. This is for SpringBoot & Spring 4.
//run with Spring context
@RunWith(SpringJUnit4ClassRunner.class)
//load the configuration through the standard spring boot application class
@SpringApplicationConfiguration(classes = LvmConfigurationServiceApplication.class)
public class AlarmConfigServiceTest {
//This object (not an interface) is the target of our tests.
//It will be filled by Spring
@Autowired
//the mocks will be injected automatically in it.
@InjectMocks
private AlarmConfigService target;
//This class will be mocked
@Mock
private QueryTemplateService queryTemplate;
//This method will reset and initalize all mocks for
//each test run
@Before
public void setupTarget() {
MockitoAnnotations.initMocks(this);
}
@Test
public void doTest() {
// ....
}
}