2013-11-04 3 views
5

Mi piacerebbe utilizzare Guice nella seguente classe di test JUnit per iniettare dipendenze fittizie, in particolare lo resource. Come posso fare questo?Come fingere dipendenze iniettate

prova

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

} 

Resource

@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

Si desidera iniettare il DAO nel test dell'unità? O stai già iniettando il DAO nella classe che stai testando? – rmlan

+0

Spiacente, ho bisogno di iniettare il 'Resource' nel test unitario e prendere in giro il' DAO' all'interno del 'Resource' inietto' – Ari

+0

Puoi mostrare il codice per la Risorsa? Come viene dichiarato/utilizzato DAO? – rmlan

risposta

3

Una possibilità potrebbe essere quella di legare l'istanza Mock DAO per la classe DAO quando si crea il vostro iniettore Guice. Quindi, quando aggiungi SampleResource, utilizza invece il metodo getInstance. Qualcosa del genere:

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

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

Si consiglia di ignorare la configurazione di iniezione Guice utilizzando un altro modulo di test.

Lo mostrerò utilizzando il proprio esempio, ma è facile adattarsi alle proprie esigenze.

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