Использование инъекции зависимостей в Джерси в автономном приложении
У меня есть интерфейс здесь
interface Idemo{
public int getDemo(int i);
}
И это одна реализация
class DemoImpl implements Idemo{
@Override
public int getDemo(int i){
return i+10;
}
}
И есть класс, который зависит от Idemo
class Sample{
@Inject
Idemo demo;
public int getSample(int i){
return demo.getDemo(i);
}
}
Теперь скажите, что я хочу проверить образец класса
public class SampleTest extends JerseyTest {
@Inject
Sample s;
@Override
protected Application configure() {
AbstractBinder binder = new AbstractBinder() {
@Override
protected void configure() {
bind(Demo.class).to(Idemo.class);
bind(Sample.class).to(Sample.class); //**doesn't work**
}
};
ResourceConfig config = new ResourceConfig(Sample.class);
config.register(binder);
return config;
}
@Test
public void test_getSample() {
assertEquals(15, s.getSample(5)); //null pointer exception
}
}
Здесь экземпляр Sample не создается и s остается нулевым. Я полагаю, это потому, что к тому времени, когда выполнение достигает строки, где указана привязка, этот тестовый класс уже создан. Но я не уверен. С Spring Autowired вместо jersey CDI те же работы
Если бы Sample был классом ресурса / контроллера, тестовая среда создала бы его экземпляр без необходимости его внедрения, но возможно ли протестировать любой другой не веб-класс с использованием Jersey DI?