Jersey JUnit 测试:未调用@WebListener ServletContextListener
Jersey JUnit Test: @WebListener ServletContextListener not invoked
我在泽西岛创建了这个测试(来自 docs),它工作正常,但有一个问题:@WebListener ServletContextListener
没有被调用。
我需要测试的资源 类 依赖于 ServletContextListener 在 ServletContext 上设置的属性。
我能否确保它被调用,或者我能否以其他方式操纵 ServletContext?
public class SimpleTest extends JerseyTest {
@WebListener
public static class AppContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println("Context initialized");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
System.out.println("Context destroyed");
}
}
@Path("hello")
public static class HelloResource {
@GET
public String getHello() {
return "Hello World!";
}
}
@Override
protected Application configure() {
return new ResourceConfig(HelloResource.class);
}
@Test
public void test() {
final String hello = target("hello").request().get(String.class);
assertEquals("Hello World!", hello);
}
}
我添加了这些依赖项以使其工作:
<dependency>
<groupId>org.glassfish.jersey.test-framework</groupId>
<artifactId>jersey-test-framework-core</artifactId>
<version>2.18</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<version>2.18</version>
</dependency>
在Servlet环境下JerseyTest
需要设置为运行,如。以下是好的部分:
@Override
protected TestContainerFactory getTestContainerFactory() {
return new GrizzlyWebTestContainerFactory();
}
@Override
protected DeploymentContext configureDeployment() {
ResourceConfig config = new ResourceConfig(SessionResource.class);
return ServletDeploymentContext.forServlet(new ServletContainer(config))
.addListener(AppContextListener.class)
.build();
}
查看
的 API
ServletDeploymentContext
和
ServletDeployementContext.Builder
(这是您在 ServletDeploymentContext
上调用 forServlet
时返回的内容)。
我在泽西岛创建了这个测试(来自 docs),它工作正常,但有一个问题:@WebListener ServletContextListener
没有被调用。
我需要测试的资源 类 依赖于 ServletContextListener 在 ServletContext 上设置的属性。
我能否确保它被调用,或者我能否以其他方式操纵 ServletContext?
public class SimpleTest extends JerseyTest {
@WebListener
public static class AppContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println("Context initialized");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
System.out.println("Context destroyed");
}
}
@Path("hello")
public static class HelloResource {
@GET
public String getHello() {
return "Hello World!";
}
}
@Override
protected Application configure() {
return new ResourceConfig(HelloResource.class);
}
@Test
public void test() {
final String hello = target("hello").request().get(String.class);
assertEquals("Hello World!", hello);
}
}
我添加了这些依赖项以使其工作:
<dependency>
<groupId>org.glassfish.jersey.test-framework</groupId>
<artifactId>jersey-test-framework-core</artifactId>
<version>2.18</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-grizzly2</artifactId>
<version>2.18</version>
</dependency>
在Servlet环境下JerseyTest
需要设置为运行,如
@Override
protected TestContainerFactory getTestContainerFactory() {
return new GrizzlyWebTestContainerFactory();
}
@Override
protected DeploymentContext configureDeployment() {
ResourceConfig config = new ResourceConfig(SessionResource.class);
return ServletDeploymentContext.forServlet(new ServletContainer(config))
.addListener(AppContextListener.class)
.build();
}
查看
的 APIServletDeploymentContext
和ServletDeployementContext.Builder
(这是您在ServletDeploymentContext
上调用forServlet
时返回的内容)。