【问题标题】:Spring integration testing of logout注销的Spring集成测试
【发布时间】:2021-06-26 19:57:24
【问题描述】:

我有一个包含注销端点的 Spring 控制器

@PostMapping("/logout")
public ResponseEntity<Void> logout() {
    var request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
    try {
        request.logout();
        return new ResponseEntity<>(HttpStatus.OK);
    } catch (ServletException e) {
        log.error("Unable to logout");
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

如何使用 mockmvc 进行测试?

到目前为止,我所拥有的是这段代码,但我不知道如何测试 request.logout() 是否被调用(它的效果是什么?)。

mvc.perform(MockMvcRequestBuilders.post("/logout").principal(principal)).expect(??)

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    来自Post

    使用spring安全测试包,试试这段代码:

    getMockMvc().perform(get("http://login.com").principal(principal))
            .andExpect(status().isOk()));
    

    或者:

    getMockMvc().perform(get("http://your-url.com").principal(new UserPrincipal("TEST_USER_ID"))).andExpect(status().isOk()));
    

    【讨论】:

    • 嗯,我感兴趣的测试部分并不是真正的状态码,而是request.logout() 产生的副作用。换句话说,如果我注释掉request.logout(),我希望测试失败。你的 sn-p 没有做到这一点。
    • 好的,看看我在解决方案中提到的帖子,您可以使用来自@Nagy Attila 解决方案的final ResultActions resultActions = this.mockMvc.perform(sessionLogout());
    • 我不确定它是如何关联的,那么你能编辑你的答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    相关资源
    最近更新 更多