2015-02-23 3 views
1

Я хочу ввести экземпляр из Guice injector в мой unitTest.Как аннотировать инжектор.getInstance?

Какой дифференциатор можно использовать?

Я знаю @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

ответ

1

Injector.getInstance(Key) Использование:

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

Когда речь идет о переплетом Guice внутренне использует неизменный Key экземпляр, который ссылается на статус аннотации (класс аннотации привязки, экземпляр аннотации привязки или отсутствие привязки аннотации) в сочетании с типом (литералом класса, экземпляром типа или типом TypeLiteral). Соответствуя этой матрице, существует 9 различных перегрузок Key.get, который является статическим заводским методом для получения этих объектов Key. Перегрузки, которые принимают Class<?>, предлагаются только для удобства.

В общем, в любое время, когда вы хотите представить параметризованный или аннотированный тип (например, в getInstance или bind), вы можете использовать перегрузку, в которой вместо этого используется ключ.

3

Для тестирования вы можете просто ввести в свой тестовый пример. Затем вы можете использовать свои точки впрыска точно так же, как в производственном коде:

@Inject 
@SecondType 
private RoutingResponseRepository; 

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

не заботясь о типах и ключах.

Смежные вопросы