2013-11-04 6 views
5

मैं नकली निर्भरताओं को इंजेक्ट करने के लिए निम्नलिखित JUnit परीक्षण कक्षा में Guice का उपयोग करना चाहता हूं, विशेष रूप से resource। मैं यह कैसे कर सकता हूँ?इंजेक्शन निर्भरता को कैसे मॉक करें

टेस्ट

public class SampleResourceTest extends ResourceTest { 

    @Override 
    protected void setUpResources() throws Exception { 
     // when(dao.getSample(eq("SIP"), eq("GA"))).thenReturn(sam); 
     addResource(new SampleResource()); 
    } 

    @Test 
    public void getSampleTest() { 
     Assert.assertEquals(sam, client().resource("/sample/SIP/GA").get(Sample.class)); 
    } 

} 

संसाधन

@Path("/sample") 
@Produces(MediaType.APPLICATION_JSON) 
public class SampleResource { 

    @Inject 
    private SampleDao samDao; 

    @GET 
    @Path("/{sample}/{id}") 
    public Sample getSample(@PathParam("id") String id) { 
     return samDao.fetch(id); 
    } 

} 
+0

क्या आप इकाई परीक्षण में डीएओ इंजेक्ट करना चाहते हैं? या आप पहले से ही कक्षा में डीएओ इंजेक्शन कर रहे हैं जिसका आप वास्तव में परीक्षण कर रहे हैं? – rmlan

+0

क्षमा करें, मुझे यूनिट परीक्षण में 'संसाधन' इंजेक्ट करने की आवश्यकता है, और 'डीएओ' इंजेक्शन 'संसाधन' – Ari

+0

के भीतर नकल करने की आवश्यकता है क्या आप संसाधन के लिए कोड दिखा सकते हैं? डीएओ घोषित/उपयोग कैसे किया जाता है? – rmlan

उत्तर

3

एक विकल्प है जब आपके Guice इंजेक्टर बनाने डीएओ वर्ग के लिए मॉक डीएओ उदाहरण बाध्य करने के लिए किया जाएगा। फिर, जब आप SampleResource जोड़ते हैं, तो इसके बजाय getInstance विधि का उपयोग करें। कुछ ऐसा:

Injector injector = Guice.createInjector(new AbstractModule() { 
     @Override 
     protected void configure() { 
      bind(SampleDao.class).toInstance(mockDao); 
     } 
}); 

addResource(injector.getInstance(SampleResource.class); 
6

किसी अन्य परीक्षण मॉड्यूल का उपयोग करके अपने गुइस इंजेक्शन कॉन्फ़िगरेशन को ओवरराइड करने पर विचार करें।

मैं इसे अपने उदाहरण का उपयोग करके दिखाऊंगा, लेकिन आपकी आवश्यकताओं को अनुकूलित करना आसान है।

Module testModule = Modules.override(new ProductionModule()) 
    .with(new AbstractModule(){ 

    @Override 
    protected void configure() { 
     bind(QueueFactory.class).toInstance(spy(new QueueFactory())); 
    } 

}); 

Injector injector = Guice.createInjector(testModule); 
QueueFactory qFactorySpy = injector.getInstance(QueueFactory.class); 
संबंधित मुद्दे