[英]How do I inject dependencies in Junit test case using Guice before @Rule runs?
我正在使用的框架是Dropwizard 7,Guice,為了測試我們有Junit和Jukito。 我有一個用dw編寫的資源,我需要編寫一個與該資源相對應的測試用例。 注意:我們最近從dw 6遷移到dw 7。
在dw 6中我們有測試用例,例如:
@RunWith(JukitoRunner.class)
public class AbcResourceTest extends ResourceTest{
@Inject
private Provider<XyzAction> xyzProvider;
public void setUpResources() throws Exception {
addResource(new AbcResource(xyzProvider));
}
@Test
public void doTesting() {
}
}
這個方法工作得很好,Guice會注入所有依賴項,資源初始化就好了。
但在DW 7中,編寫資源測試的語法更改為以下內容
public class ResourceTest {
PersonDao personDao = mock(PersonDao.class);
@Rule public ResourceTestRule resources = ResourceTestRule
.builder()
.addResource(new Resource(personDao))
.build();
}
這是dw文檔中的一個示例,工作正常。 但如果我嘗試注入這樣的東西,而不是嘲笑PersonDao:
@RunWith(JukitoRunner.class)
public class AbcResourceTest {
@Inject
private Provider<XyzAction> xyzProvider;
@Rule public ResourceTestRule resources = ResourceTestRule
.builder()
.addResource((new AbcResource(xyzProvider))
.build();
@Test
public void doTesting() {
}
}
此代碼實例化xyzProvider的空值資源。 雖然Guice確實實例化了xyzProvider,但只有在評估了@Rule之后。 現在我的問題是我希望Guice在評估@Rule之前注入依賴。 有沒有辦法讓這種情況發生?
我懷疑JukitoRunner
會在@Rule
運行之前引起注射。 但它不能做的是在構造函數完成之前導致注入。 這樣的東西可能會起作用(Java 8語法):
@Inject
private XyzAction xyz;
@Rule
public ResourceTestRule resources = ResourceTestRule
.builder()
.addResource(new AbcResource(() -> xyz))
.build();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.