如何在 MockRestServiceServer 中模拟 http 标头?

Posted

技术标签:

【中文标题】如何在 MockRestServiceServer 中模拟 http 标头?【英文标题】:How to mock http header in MockRestServiceServer? 【发布时间】:2018-05-22 19:56:21 【问题描述】:

我正在使用MockRestServiceServer 模拟外部 Web 服务 xml 响应。 这已经很好了,但是我怎样才能在响应中模拟 http 标头,而不仅仅是响应正文?

    @MockBean
    private RestTemplate restTemplate;

    private MockRestServiceServer mockServer;

    @Before
    public void createServer() throws Exception 
        mockServer = MockRestServiceServer.createServer(restTemplate);
    

    @Test
    public void test() 
        String xml = loadFromFile("productsResponse.xml");
        mockServer.expect(MockRestRequestMatchers.anything()).andRespond(MockRestResponseCreators.withSuccess(xml, MediaType.APPLICATION_XML));
    

【问题讨论】:

【参考方案1】:

只需按照您的withSuccess 方法和headers 方法即可。

mockServer
       .expect(...)
       .andRespond(withSuccess().headers(...));

【讨论】:

【参考方案2】:

@Gorazd 的回答是正确的。给它添加更多的肉:

HttpHeaders headers = new HttpHeaders();
headers.setLocation(new URI(billingConfiguration.getBillingURL()+"/events/123"));
mockServer.expect(ExpectedCount.once(),
    requestTo(new URI(billingConfiguration.getBillingURL())))                    
    .andExpect(method(HttpMethod.POST))
    .andRespond(withStatus(HttpStatus.OK)
    .contentType(MediaType.APPLICATION_JSON).headers(headers));

【讨论】:

【参考方案3】:

以下代码对我有用:

HttpHeaders mockResponseHeaders = new HttpHeaders();
mockResponseHeaders.set("Authorization", mockAuthToken);

mockServer
        .expect(once(), requestTo(testhUrl))
        .andExpect(method(HttpMethod.POST))
        .andRespond(withSuccess().headers(mockResponseHeaders));

【讨论】:

以上是关于如何在 MockRestServiceServer 中模拟 http 标头?的主要内容,如果未能解决你的问题,请参考以下文章

MockRestServiceServer:如何用身体模拟 POST 调用?

使用 MockRestServiceServer 时无法精确测试服务调用次数

Spring MockRestServiceServer 处理多个异步请求

由于未绑定的 RestTemplate,Spring-Boot RestClientTest 无法正确自动配置 MockRestServiceServer

如何管理在开发(而非测试)环境中使用多个微服务并对其进行模拟?

Spring Boot + 云 | Zuul 代理 |集成测试