簡體   English   中英

在@Rule運行之前如何使用Guice在Junit測試用例中注入依賴項?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM