2013-11-04 9 views
5

Ich möchte Guice in der folgenden JUnit-Testklasse verwenden, um Scheinabhängigkeiten zu injizieren, speziell die resource. Wie kann ich das machen?Wie man injizierte Abhängigkeiten verspottet

-Test

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

} 

Ressourcen

@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

Möchten Sie das DAO in den Komponententest injizieren? Oder spritzt du die DAO bereits in die Klasse ein, die du gerade testetest? – rmlan

+0

Tut mir leid, ich muss die "Ressource" in den Komponententest injizieren und das 'DAO' in der injizierten' Ressource' verspotten. – Ari

+0

Kannst du Code für die Ressource anzeigen? Wie wird die DAO deklariert? – rmlan

Antwort

3

Eine Möglichkeit wäre, die Mock DAO-Instanz auf die DAO-Klasse zu binden, wenn Ihr Injektor Guice zu schaffen. Wenn Sie dann die SampleResource hinzufügen, verwenden Sie stattdessen die Methode getInstance. Beispiel:

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

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

Überlegen Sie, Ihre Guice-Injektionskonfiguration mit einem anderen Testmodul zu überschreiben.

Ich werde es mit eigenen Beispiel zeigen, aber es ist einfach, sich an Ihre Bedürfnisse anzupassen.

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