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