min*_*ate 5 java junit jersey guice
我有一个泽西资源,我想用JUnit测试.该资源使用Guice Providers注入某些字段:
@Path("/example/")
class ExampleResource {
@Inject
Provider<ExampleActionHandler> getMyExampleActionHandlerProvider;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<ExamplePojo> getExampleList() {
ExampleActionHandler handler = getMyExampleActionHandlerProvider.get();
handler.doSomething();
...
Run Code Online (Sandbox Code Playgroud)
当使用真实服务器为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);
}
}
Run Code Online (Sandbox Code Playgroud)
显然,Guice没有机会初始化字段,ExampleResource因此handler.doSomething()调用不会导致NullPointerException.
有没有办法告诉Jersey使用Guice实例化ExampleResource类,以便提供程序工作?
一种方法是将测试分解为几个步骤。您需要创建用于配置服务的注入器并测试该注入器(请参阅测试 Guice Servlet 绑定和测试 Guice 可以初始化 servlet)。使用这些测试可以确保您拥有正确的绑定。获得注入器后,使用以下命令从中获取 ApplicationDescriptor 对象
ExampleResource exampleResource = injector.getInstance(ExampleResource.class);
Assert.assertEquals(myList, getExampleList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2271 次 |
| 最近记录: |