【发布时间】:2015-08-04 16:43:18
【问题描述】:
以下是我们在新应用程序中使用 Guice 的方式:
public class ObjectFactory {
private static final ObjectFactory instance = new ObjectFactory();
private final Injector injector;
private ObjectFactory() throws RuntimeException {
this.injector = Guice.createInjector(new Module1());
}
public static final ObjectFactory getInstance() {
return instance;
}
public TaskExecutor getTaskExecutor() {
return injector.getInstance(TaskExecutor.class);
}
}
Module1 定义了TaskExecutor 的构造方式。
在代码中我们使用ObjectFactory.getInstance().getTaskExecutor()来获取和TaskExecutor的实例。
在单元测试中,我们希望能够用FakeTaskExecutor 替换它,本质上我们希望在调用ObjectFactory.getInstance().getTaskExecutor() 时获得FakeTaskExecutor 的实例。
我正在考虑实现一个FakeModule,注入器将使用它而不是Module1。
在 Spring 中,我们只需使用 @Autowired 注释,然后为 Test 和 Production 代码定义单独的 bean,并使用 Spring4JunitRunner 运行我们的测试;我们正在尝试对 Guice 做类似的事情。
【问题讨论】:
-
你研究过嘲笑吗? Mockito 是我推荐的 API。
-
FakeTaskExecutor可以是模拟或测试替身,我不知道如何拦截ObjectFactory内的注入器。使用 PowerMock 的 Mockito 是做到这一点的唯一方法吗?如果是,我们是否错误地使用了 Guice。
标签: java spring unit-testing guice