spring 如何使用MockMvc验证响应的位置标头中的重定向url

iszxjhcz  于 2023-02-11  发布在  Spring
关注(0)|答案(1)|浏览(140)

我正在用MockMvc测试一个端点。这个端点在末尾做了一个重定向,所以它在位置头中设置了重定向URL。这个URL有几个参数,所以得到的重定向URL如下:

https://platform:8080/auth?scope=openid&response_type=id_token&response_mode=form_post&prompt=none&client_id=toolid&redirect_uri=https://localhost:8080/tool/token/receiver&login_hint=loginHint&state=1d73c90f-fe03-47dc-9e28-ed416fad7773&nonce=7b5e7240-161e-4d78-8e32-54923c9ce04a

我想检查至少9个参数是否存在。我的想法如下:

mockMvc.perform(get(OIDC_INIT_FLOW_ENDPOINT)
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .params(initFlowRequestParams))
        .andExpect(status().isFound())
        .andExpect(header().exists(LOCATION))
        .andExpect(header().string(LOCATION, contains("openId")));

这段代码因为最后一个“andExpect”而无法工作,但它显示了我的意图。我如何才能实现我的目标?

gcuhipw9

gcuhipw91#

尝试使用:

import static org.hamcrest.Matchers.containsString;

// ...
mockMvc.perform(get(OIDC_INIT_FLOW_ENDPOINT)
                 .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                 .params(initFlowRequestParams))
        .andExpect(status().isFound())
        .andExpect(header().exists(LOCATION))
        .andExpect(header().string(LOCATION, containsString("openId")));

我的直觉是你正在使用的contains方法是一个Mockito参数匹配器,这会导致string() match方法的错误重载。你想要使用的重载需要一个Hamcrest匹配器。

相关问题