当前位置: 首页 > 知识库问答 >
问题:

泽西JUnit测试:@WebListener ServletContextListener未调用

詹联
2023-03-14

我在泽西(从文档中)创建了这个测试,它运行良好,但有一个问题:@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>

共有1个答案

羊舌富
2023-03-14

如本文所述,需要将JerseyTest设置为在Servlet环境中运行。以下是好的部分:

@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和
 类似资料:
  • 我正在从事一个用Jersey 2(用于RESTAPI)和Spring(用于DI)实现的REST项目,我想编写功能/集成测试。我尝试使用JerseyTest框架并使用真实的数据库进行这些测试。我唯一想模拟的是我的应用程序使用的远程Web服务(SOAP),为此我应该模拟生成的WS客户端。 在花了大量时间研究Jersey2和Spring的JerseyTest框架之后,似乎不可能为集成测试设置该框架。你能

  • 我编写了调用泽西岛客户端API的代码,而该API又调用了我无法控制的Web服务。我不希望我的单元测试调用实际的 Web 服务。 为调用Jersey客户端API的代码编写单元测试的最佳方法是什么?我应该使用Jersey服务器API编写JAX-RS web服务,然后使用Jersy测试框架进行单元测试吗?还是应该模拟Jersey web服务调用?我有权访问JMock。还是我应该尝试另一种方法? 在我的研

  • 我有一个有点困难的情况。我正在使用泽西提供REST服务。 在我的运行时中,我使用版本1.16.0执行此操作: 这是我的资源类: 这是有效的,我得到了预期的json响应。 现在我找到了一个为集成测试提供内存服务器的杰西测试框架。 不幸的是,这似乎只适用于泽西2。x、 所以我为我的测试添加了一个额外的梯度设置: 这是我的测试课: 只要我的资源返回字符串,这个设置就可以运行。但是,只要我返回一个响应,如

  • 我试图在Jersey测试类中注入一个由HK2工厂服务提供的对象,但得到未满足的依赖项异常。 MultiException有3个异常。它们是: org.glassfish.hk2.api.unsatifiedDependencyException:在SystemInjecteeImpl(requiredtype=closeableService,parent=TestFactory,qualifie

  • 我正在使用Jersey编写REST web服务,并尝试编写一组单元测试,以使用Jersey测试框架测试该服务。 然而,我使用HTTP身份验证和SecurityContext作为我的web服务的一部分,我在设置JTF以允许我测试这些方面时遇到了问题。我可以在请求中发送身份验证信息,但如何配置它以了解我希望设置的不同角色和用户? 我目前正在使用Jetty(通过JettyTestContainerFac

  • 我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?