2014-10-11 15 views
5

Rozważ toJak wyśmiać obiekty utworzone w metodzie?

public class UserManager { 
    private final CrudService crudService; 

    @Inject 
    public UserManager(@Nonnull final CrudService crudService) { 
     this.crudService = crudService; 
    } 

    @Nonnull 
    public List<UserPresentation> getUsersByState(@Nonnull final String state) { 
     return UserPresentation.getUserPresentations(new UserQueries(crudService).getUserByState(state)); 
    } 

} 

chcę drwić z

new UserQueries(crudService) 

tak, że można drwić z jego zachowanie

Jakieś pomysły?

+0

może to pomoże: http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Spy.html –

Odpowiedz

2

Możesz wstrzyknąć fabrykę, która utworzy UserQueries.

public class UserManager { 
private final CrudService crudService; 
private final UserQueriesFactory queriesFactory; 

@Inject 
public UserManager(@Nonnull final CrudService crudService,UserQueriesFactory queriesFactory) { 
    this.crudService = crudService; 
    this.queriesFactory = queriesFactory; 
} 

@Nonnull 
public List<UserPresentation> getUsersByState(@Nonnull final String state) { 
    return UserPresentation.getUserPresentations(queriesFactory.create(crudService).getUserByState(state)); 
} 

}

Chociaż może to być lepiej (jeśli masz zamiar to zrobić), aby wprowadzić swój CrudService do fabryki.

8

Dzięki PowerMock można symulować konstruktorów. Zobacz example

nie jestem z IDE teraz, ale będzie coś takiego:

UserQueries userQueries = PowerMockito.mock(UserQueries.class); 
    PowerMockito.whenNew(UserQueries.class).withArguments(Mockito.any(CrudService.class)).thenReturn(userQueries); 

Musisz uruchomić test z PowerMockRunner (dodaj te adnotacje do klasy testowej):

@RunWith(PowerMockRunner.class) 
@PrepareForTest(UserQueries .class) 

Jeśli nie możesz użyć PowerMocka, musisz wstrzyknąć fabrykę, jak mówi odpowiedź @Briggo.

Nadzieja pomaga

Powiązane problemy