2014-10-11 12 views
5

इसविधि के अंदर बनाई गई वस्तुओं का नकल कैसे करें?

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

} 

मैं बाहर उपहास करने के लिए

new UserQueries(crudService) 

ताकि मैं अपने व्यवहार

कोई भी विचार बाहर नकली कर सकते हैं पर विचार करें?

+0

शायद यह मदद कर सकते हैं: http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Spy.html –

उत्तर

2

आप ऐसे कारखाने को इंजेक्ट कर सकते हैं जो 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)); 
} 

}

यह बेहतर हो सकता है हालांकि कारखाने में अपने CrudService सुई (यदि आप ऐसा करने के लिए जा रहे हैं)।

8

PowerMock के साथ आप रचनाकारों का मज़ाक उड़ा सकते हैं। example

देखें मैं से IDE से अभी नहीं कर रहा हूँ, लेकिन कुछ इस तरह होगा:

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

आप PowerMockRunner के साथ अपने परीक्षण चलाने के लिए (अपने परीक्षण वर्ग के लिए इन एनोटेशन जोड़ने) की जरूरत है:

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

यदि आप पावरमैक का उपयोग नहीं कर सकते हैं, तो आपको एक कारखाना इंजेक्ट करना होगा, जैसा कि यह @Briggo उत्तर देता है।

आशा है कि यह मदद करता है

संबंधित मुद्दे