我通過實施定製InjectableProvider找到了解決方案。以下代碼取自Oracle article:
import javax.ejb.EJB;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.ws.rs.ext.Provider;
import com.sun.jersey.core.spi.component.ComponentContext;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.spi.inject.Injectable;
import com.sun.jersey.spi.inject.InjectableProvider;
@Provider
public class EJBProvider implements InjectableProvider<EJB, Type> {
public Scope getScope() {
return Scope.Singleton;
}
public Injectable getInjectable(ComponentContext cc, EJB ejb, Type t) {
if (!(t instanceof Class)) return null;
try {
Class c = (Class)t;
Context ic = new InitialContext();
final Object o = ic.lookup(c.getName());
return new Injectable<Object>() {
public Object getValue(HttpContext c) {
return o;
}
};
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
我不得不稍微調整它以適合我的環境。還要注意提供者必須和你的服務類在同一個包中,否則它將不會被拾取(它在文章中沒有說)。
模擬'Mapper'。除非您需要完整的集成測試,否則您需要可以加載完整EE環境的東西。也許像arquillian。 –
你可以通過Mockito嘲笑'Mapper'看到一種方式[這裏](http://stackoverflow.com/a/27447345/2587435) –
我在考慮集成測試,因爲單元測試已經完成;所以我想使用輕型EE嵌入式容器。 –