2014-10-11 28 views
5

Ben davranışınıYöntem içinde oluşturulan nesneler nasıl yapılır?

Herhangi bir fikir dışarı taklit olduğunu

new UserQueries(crudService) 

yüzden dışarı taklit istiyor bu

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)); 
    } 

} 

düşünün?

+0

yardımcı olur umarım: http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Spy.html –

cevap

2

UserQueries yaratan bir fabrika enjekte edebilir.

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)); 
} 

}

fabrikaya içine CrudService enjekte etmek (bunu yapacağız varsa) daha iyi olsa da.

8

PowerMock ile yapıcılarla alay edebilirsiniz. Şu an bir IDE ile değilim, ama böyle bir şey olacağını example

Bkz:

Sen PowerMockRunner ile testi (test sınıfına bu açıklamaları ekleyin) gerekir
UserQueries userQueries = PowerMockito.mock(UserQueries.class); 
    PowerMockito.whenNew(UserQueries.class).withArguments(Mockito.any(CrudService.class)).thenReturn(userQueries); 

:

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

PowerMock'u kullanamıyorsanız, @Briggo yanıtı yazdığı gibi bir fabrika enjekte etmeniz gerekir.

belki bu yardımcı olabilir o

İlgili konular