依存性注入のために Google Guice で Jersey 1.X を使用しています。Jersey 2.X に切り替えるということは、代わりに依存性注入に HK2 を使用する必要があることを意味しているようです。
Guice を使用した Jersey 1.X では、アプリケーションは次のようになります。
public class GuiceServletTestConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServletModule(){
@Override
protected void configureServlets(){
bind(MyResource.class);
serve("/*").with(GuiceContainer.class);
bind(MyDAO.class).to(MyDAOSQL.class)
}
});
}
}
そして、テストの場合は次のようになります。
public class GuiceServletTestConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServletModule(){
@Override
protected void configureServlets(){
bind(MyResource.class);
serve("/*").with(GuiceContainer.class);
}
@Provides
MyDAO provideMockMyDAO(){
MyDAO dao = mock(MyDAO.class);
return dao;
}
});
}
}
私のリソースは次のようになります。
@Path("myresource")
public class MyResource {
private MyDAO myDAO;
@Inject
protected void setMyDAO(MyDAO myDAO) {
this.myDAO = myDAO;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response get() {
// Do something with myDAO
// Return response
}
}
つまり、テスト用のモックを定義でき、すべてが良好です。
ただし、Jersey 2.X では、@Provides アノテーションに相当するものが見つかりません。MyResource は事実上同じです。実際のアプリケーションの依存性注入については、次のものがあります。
public class Application extends ResourceConfig {
public Application() {
packages("com.my.package.resources");
register(new AbstractBinder() {
@Override
protected void configure() {
bind(MyDAOSQL.class).to(MyDAO.class);
}
});
}
}
しかし、テスト用のモックを提供する方法がわかりません。誰でも方法を知っていますか?