在 @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();
我正在使用的框架是 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();