为了账号安全,请及时绑定邮箱和手机立即绑定

在junit5中单元测试dropwizard时如何注入HttpSession

在junit5中单元测试dropwizard时如何注入HttpSession

临摹微笑 2021-12-01 16:49:31
这是非常令人沮丧的。我使用dropwizard建立一个应用程序,并测试它junit5和dropwizard-测试模块(在junit5版)。然后,我试图在资源中测试一个简单的端点。端点接收 HttpSession(和请求),但它始终是null。我读了很多,但我找不到如何注入会话。这是我的资源:@POST@Path("/doStuff")@Consumes(MediaType.APPLICATION_FORM_URLENCODED)@Produces(MediaType.TEXT_HTML)public String doStuff(@Session HttpSession session        , @Context HttpServletRequest request) {     // Do the stuff with the session and the request}我的测试是这样的:@ExtendWith(DropwizardExtensionsSupport.class)class MyResourceTest {    ResourceExtension resources = ResourceExtension.builder()        .addResource(new MyResource())        .build();    @BeforeEach    void setup() {    }    @Test    void testDoStuff() {        Response response = resources.target("/api/doStuff")            .request(MediaType.APPLICATION_FORM_URLENCODED)            .accept(MediaType.TEXT_HTML)            .post();        System.out.println(response);    }}我需要通过测试来操作会话和请求。是否可以?感谢所有帮助。
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

您需要添加一个测试容器工厂。


ResourceExtension resources = ResourceExtension.builder()

    .setTestContainerFactory(new GrizzlyWebTestContainerFactory())

    .addResource(new MyResource())

    .build();

如果您使用 Maven:


<dependency>

    <groupId>org.glassfish.jersey.test-framework.providers</groupId>

    <artifactId>jersey-test-framework-provider-grizzly2</artifactId>

    <!-- version>${jersey.version}</version -->

    <scope>test</scope>

    <exclusions>

        <exclusion>

            <groupId>javax.servlet</groupId>

            <artifactId>javax.servlet-api</artifactId>

        </exclusion>

        <exclusion>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

        </exclusion>

    </exclusions>

</dependency>


查看完整回答
反对 回复 2021-12-01
?
HUWWW

TA贡献1874条经验 获得超12个赞

我有一个类似的问题,也用一个测试容器工厂解决了它。但是,我的方法与 jgl 之前发布的方法不同。


public class SessionRestTest extends JerseyTest {


    @Override

    protected TestContainerFactory getTestContainerFactory() {

        // standard servername and port is localhost:9998

        return new GrizzlyWebTestContainerFactory();

    }


    @Override

    protected DeploymentContext configureDeployment() {

        ResourceConfig config = new ResourceConfig(SessionRest.class);

        return ServletDeploymentContext.forServlet(

                new ServletContainer(config)).build();

    }


    private Response get() {

        return target("/session/logout").request().get();

    }


    @Test

    public void testRedirectURL() {

        Response response = get();

        assertEquals("should return status 200", HttpStatus.OK_200, response.getStatus());

    }


}


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 257 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信