单元测试 - 如何使用 Spring MockMVC 调用 soap 服务

Unit tests - How to use Spring MockMVC to call soap service

我正在使用下面列出的代码对我的其余服务进行单元测试,并且请求已成功命中该服务。

     import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

     private MockMvc mvc;

     private URI = "/order/1"

     this.mvc.perform(
            post(URI).headers(headers)
                    .contentType(MediaType.APPLICATION_JSON_UTF8)
                    .content(mapper.writeValueAsString(request))
                    .accept(MediaType.APPLICATION_JSON_UTF8))
            .andExpect(result -> {
                response[0] = result.getResponse().getContentAsString();
                statusCode[0] = result.getResponse().getStatus();
            });

我正在尝试使用类似的代码测试我的 soap 服务 (http://localhost:8080/OrderService/13.08.wsdl)。当我通过浏览器访问时,端点似乎已启动,但在结果中看到 404 -

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

     private MockMvc mvc;

     private URI = "http://localhost:8080/OrderService/13.08.wsdl";

     this.mvc.perform(
            post(URI).headers(headers)
                    .contentType(MediaType.TEXT_XML)
                    .content(request.toString())
                    .accept(MediaType.TEXT_XML))
            .andExpect(result -> {
                response[0] = result.getResponse().getContentAsString();
                statusCode[0] = result.getResponse().getStatus();
            });

您的 URI 是要获取的 wsdl 文件,您的代码针对此 URI 执行 POST。 尝试修改您的代码行:

post(URI).headers(headers)

使用适当的方法:

get(URI).headers(headers)

@WebMvcTest 注解将只加载应用程序的控制器层。这将只扫描 @Controller/@RestController 注释,不会加载完整的 ApplicationContext

参考:https://springbootdev.com/2018/02/22/spring-boot-test-writing-unit-tests-for-the-controller-layers-with-webmvctest/