2013-11-04 20 views
5

Tôi muốn sử dụng Guice trong lớp kiểm tra JUnit sau để tiêm phụ thuộc giả, cụ thể là resource. Tôi có thể làm cái này như thế nào?Làm thế nào để Mock tiêm Dependencies

thử nghiệm

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

Bạn có muốn đưa DAO vào thử nghiệm đơn vị không? Hoặc là bạn đã tiêm DAO vào lớp bạn đang thực sự thử nghiệm? – rmlan

+0

Xin lỗi, tôi cần phải tiêm 'Tài nguyên' vào bài kiểm tra đơn vị, và giả lập' DAO' bên trong 'Tài nguyên 'đã được tiêm – Ari

+0

Bạn có thể hiển thị mã cho Tài nguyên không? DAO được khai báo/sử dụng như thế nào? – rmlan

Trả lời

3

Một lựa chọn sẽ là để ràng buộc dụ Mock DAO đến lớp DAO khi tạo phun Guice của bạn. Sau đó, khi bạn thêm SampleResource, hãy sử dụng phương thức getInstance thay thế. Một cái gì đó như thế này:

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

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

Cân nhắc ghi đè cấu hình tiêm Guice của bạn bằng mô-đun thử nghiệm khác.

Tôi sẽ hiển thị nó bằng ví dụ riêng, nhưng thật dễ dàng để thích ứng với nhu cầu của bạn.

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); 
Các vấn đề liên quan