2010-02-18 10 views
4

Je suis novice en tests fictifs. Je veux tester ma méthode de service CorrectionService.CorrectPerson(Long personId). La mise en œuvre est pas encore écrit mais ce qu'elle fera:Mockito: Comment tester mon service avec moqueur?

CorrectionService appellera une méthode de AddressDAO qui enlèvera une partie de la Adress que Person a. Un Person a beaucoup Address es

Je ne suis pas sûr de ce que la structure de base doit être de mon CorrectionServiceTest.testCorrectPerson. Veuillez également confirmer/ne pas confirmer que dans ce test je n'ai pas besoin de tester si les adresses sont effectivement supprimées (cela devrait être fait dans un AddressDaoTest), seulement que la méthode DAO a été appelée.

Merci

Répondre

3

Une version simplifiée de la classe CorrectionService (modificateurs de visibilité supprimés pour simplifier).

class CorrectionService { 

    AddressDao addressDao; 

    CorrectionService(AddressDao addressDao) { 
     this.addressDao; 
    } 

    void correctPerson(Long personId) { 
     //Do some stuff with the addressDao here... 
    } 

} 

Dans votre test:

import static org.mockito.Mockito.*; 

public class CorrectionServiceTest { 

    @Before 
    public void setUp() { 
     addressDao = mock(AddressDao.class); 
     correctionService = new CorrectionService(addressDao); 
    } 


    @Test 
    public void shouldCallDeleteAddress() { 
     correctionService.correct(VALID_ID); 
     verify(addressDao).deleteAddress(VALID_ID); 
    } 
} 
11

Version Cleaner:

@RunWith(MockitoJUnitRunner.class) 
public class CorrectionServiceTest { 

    private static final Long VALID_ID = 123L; 

    @Mock 
    AddressDao addressDao; 

    @InjectMocks 
    private CorrectionService correctionService; 

    @Test 
    public void shouldCallDeleteAddress() { 
     //when 
     correctionService.correct(VALID_ID); 
     //then 
     verify(addressDao).deleteAddress(VALID_ID); 
    } 
}