Spring und Unit-Tests mit Mockito

Ich hatte mich schon längere Zeit gefragt, ob ich nicht noch einfacher auf die Mocks zugreifen kann, um das Verhalten zu manipulieren.

Also recherierte ich ein bißchen und bin dann bei der neusten Mockito-Version (1.9.5) auf die Annotations @Mock und @InjectMocks aufmerksam gewurden.

package de.claudioaltamura.spring.mockito.example.controller;

...

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.Errors;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "masterdatadetailvalidator-test.xml" })
public class MasterDataDetailValidatorTest {

@Autowired
@InjectMocks
private MasterDataDetailValidator validator;

private MasterDataFormBean formBean;

private Errors errors;

@Mock
@Autowired
private DateRangeValidator dateRangeValidator;

@Before
public void setUp() {
...
}

@Test
public void test() {
final DateRange dateRange = new DateRange(null, null);
formBean.getLoginData().setUseraccountValidRange(dateRange);
validator.validate(formBean, errors);

assertFalse(errors.hasErrors());
}

}

Mit @Mock kennzeichne ich einfach die Klassen die zu Mocken sind.
Und @InjectMocks benutze ich für die Klasse, die zu testen ist,
und wo die Mocks injiziert werden sollen. Das ist alles.