如何注释injector.getInstance?

时间:2015-02-23 09:36:39

标签: java junit dependency-injection guice

我想在我的unitTest中从Guice injector注入一个实例。

我可以使用哪种差异?

我知道@annotation机制用于ctor params

但是junit不允许ctor使用params。

我应该使用class fields' @annotation吗?

 public void setUp() throws Exception {
    RoutingResponseRepository routingResponseRepository = injector.getInstance(RoutingResponseRepository.class);
}

e.g。

我想要

@firstType RoutingResponseRepository

@secondType RoutingResponseRepository

2 个答案:

答案 0 :(得分:3)

对于测试,您可以注入test-case-instance。然后就像在生产代码中一样使用注入点:

@Inject
@SecondType 
private RoutingResponseRepository;

@Before
public void setUp() {
    Guice.createInjector().injectMembers(this);
}

不关心类型和关键。

答案 1 :(得分:1)

使用Injector.getInstance(Key)

injector.getInstance(Key.get(RoutingResponseRepository.class, firstType.class))

当引用绑定时,Guice在内部使用一个不可变的Key实例,该实例引用注释状态(绑定注释类,绑定注释实例或无绑定注释)与类型(类)相结合literal,Type实例或TypeLiteral)。匹配此矩阵,有{9}个不同的重载,这是获取这些Key对象的静态工厂方法。提供Key.get的超载仅为方便起见而提供。

通常,只要您想表示参数化或带注释的类型(例如Class<?>getInstance),就可以使用带有Key的重载。