L'annotation @InjectMocks
Posée sur un attribut, elle permet de définir l'objet qui recevra vos mocks. Un example valant mieux qu'un long discours :
@RunWith(MockitoJunitRunner.class)
public class AccountServiceTest {
@InjectMocks
private AccountService service = new AccountService();
@Mock
private AccountDao dao;
@Test
public void createAccountShouldCallSave() {
Account account = new Account();
service.createAccount(account);
verify(dao).save(account);
}
L'annotation @Mock permettait déjà de se passer de la création des mocks suivante :AccountDao mockedDao = mock(AccountDao.class);
L'annotation @InjectMocks permet de se passer du code d'injection des mocks dans la classe à tester, qui dans l'exemple serait effectué par un simple setter :
service.setAccountDao(mockedDao);ou par l'appel à l'utilitaire de réflexion de Spring :
ReflectionTestUtils.setField(service, "accountDao", mockedDao);Pas grand chose en soi, mais avec des fois beaucoup de tests et plusieurs dépendances ça simplifie la vie et le code est plus lisible.
Helper 1 : Activation des annotations
Il existe 2 manières d'activer les annotations Mockito :
1 - Utiliser le Runner Junit (solution ci-dessus)
2 - Vous utilisez déjà un autre Runner (Spring par exemple ?), alors l'initialisation statique est faite pour vous ! Il suffit d'écrire un @Before pour initialiser le test :
@Before
public void setUpMockito() {
MockitoAnnotations.initMocks(this);
}
Helper 2 : Instantiation automatique
Depuis la version 1.9, l'initialisation du champ annoté par @InjectMocks est inutile :
@InjectMocks private AccountService service;
Aucun commentaire:
Enregistrer un commentaire