【发布时间】:2015-06-11 19:02:25
【问题描述】:
我这里有一个界面
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);
}
}
现在说我要测试 Sample 类
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 代替球衣 CDI 相同的作品
如果 Sample 是一个资源/控制器类,测试框架会创建它的一个实例而无需注入它,但是否可以使用 Jersey DI 测试任何其他非 Web 类?
【问题讨论】:
标签: java dependency-injection jersey jersey-2.0 hk2