2015-02-23 96 views
1

我想在我的unitTest中注入一個Guice injector的實例。如何註釋injector.getInstance?

我可以使用哪種diffrentiator?

我知道@annotation機制在構造函數PARAMS

但JUnit的使用不允許使用參數構造函數。

我應該使用class fields' @annotation

public void setUp() throws Exception { 
    RoutingResponseRepository routingResponseRepository = injector.getInstance(RoutingResponseRepository.class); 
} 

例如,

我想

@firstType RoutingResponseRepository

@secondType RoutingResponseRepository

回答

1

使用Injector.getInstance(Key)

injector.getInstance(Key.get(RoutingResponseRepository.class, firstType.class)) 

當提到一個綁定,Guice的內部使用的不可變Key實例,它指與類型(類文字,類型實例或類型文本)組合的註記狀態(綁定註記類,綁定註記實例或無綁定註記)。匹配這個矩陣,有12個不同的過載Key.get,這是獲取這些Key對象的靜態工廠方法。爲了方便起見,提供了Class<?>所提供的超載。一般情況下,任何時候想要表示參數化或註釋類型(例如在getInstancebind中),您都可以使用帶有Key的重載。

3

對於測試,您可以注入到您的測試用例實例中。然後,您可以像使用生產代碼一樣使用注塑點:

@Inject 
@SecondType 
private RoutingResponseRepository; 

@Before 
public void setUp() { 
    Guice.createInjector().injectMembers(this); 
} 

不關心類型和鍵。