我想在我的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
答案 0 :(得分:3)
对于测试,您可以注入test-case-instance。然后就像在生产代码中一样使用注入点:
@Inject
@SecondType
private RoutingResponseRepository;
@Before
public void setUp() {
Guice.createInjector().injectMembers(this);
}
不关心类型和关键。
答案 1 :(得分:1)
injector.getInstance(Key.get(RoutingResponseRepository.class, firstType.class))
当引用绑定时,Guice在内部使用一个不可变的Key实例,该实例引用注释状态(绑定注释类,绑定注释实例或无绑定注释)与类型(类)相结合literal,Type实例或TypeLiteral)。匹配此矩阵,有{9}个不同的重载,这是获取这些Key对象的静态工厂方法。提供Key.get
的超载仅为方便起见而提供。
通常,只要您想表示参数化或带注释的类型(例如Class<?>
或getInstance
),就可以使用带有Key的重载。