java在@Rule运行之前,如何使用Guice在Junit测试用例中注入依赖项?
我正在使用的框架是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实例化具有空值的资源。尽管GUI确实实例化了xyzProvider,但仅在对@Rule求值之后。现在我的问题是,我希望Guice在计算@Rule之前注入依赖项。有没有办法做到这一点
# 1 楼答案
我怀疑
JukitoRunner
会导致在@Rule
运行之前发生注射。但它不能做的是在构造函数完成之前导致注入发生。类似的方法可能会奏效(Java 8语法):