我有一個Jersey資源,我想用JUnit測試。資源使用吉斯提供商注入某些領域:單元測試Jersey資源與Guice注入字段
@Path("/example/")
class ExampleResource {
@Inject
Provider<ExampleActionHandler> getMyExampleActionHandlerProvider;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<ExamplePojo> getExampleList() {
ExampleActionHandler handler = getMyExampleActionHandlerProvider.get();
handler.doSomething();
...
使用一個真正的服務器來服務API時,這所有的工作很漂亮,但是測試它是有問題的。
我的測試類現在看起來是這樣的:
public class ApiTest extends JerseyTest {
public ApiTest() throws Exception {
super();
ApplicationDescriptor appDescriptor = new ApplicationDescriptor();
appDescriptor.setContextPath("/api");
appDescriptor.setRootResourcePackageName("com.my.package.name");
super.setupTestEnvironment(appDescriptor);
}
@Test
public void testHelloWorld() throws Exception {
String responseMsg = webResource.path("example/").get(String.class);
Assert.assertEquals("{}", responseMsg);
}
}
顯然,吉斯沒有得到機會來初始化ExampleResource
所以字段的handler.doSomething()
調用不會導致空指針異常。
有沒有辦法告訴Jersey使用Guice實例化ExampleResource類,以便提供程序工作?
我知道這是一個有點晚,但關閉的機會,你看到的仍然是這個,那你最終會做什麼? – talon8
@minichate你有這個工作嗎? –