温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - Trying to use MockMvc together with Wiremock
java spring spring-boot wiremock

java - 尝试将MockMvc与Wiremock一起使用

发布于 2020-04-21 14:58:59

我正在尝试使wiremock一起运行mockMvc调用。但是下面代码中的mockMvc调用将继续抛出404,而不是预期的200 HTTP状态代码。

我知道Wiremock正在运行..当Wiremock运行时,我可以通过浏览器执行http:// localhost:8070 / lala

有人可以请教吗?


@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApp.class)
@AutoConfigureMockMvc
public class MyControllerTest { 


    @Inject
    public MockMvc mockMvc;

    @ClassRule
    public static final WireMockClassRule wireMockRule = new WireMockClassRule(8070);

    @Rule
    public WireMockClassRule instanceRule = wireMockRule;

    public ResponseDefinitionBuilder responseBuilder(HttpStatus httpStatus) {
        return aResponse()
                .withStatus(httpStatus.value());
    }

    @Test
    public void testOne() throws Exception {
        stubFor(WireMock
                .request(HttpMethod.GET.name(), urlPathMatching("/lala"))
                .willReturn(responseBuilder(HttpStatus.OK)));

        Thread.sleep(1000000);

        mockMvc.perform(MockMvcRequestBuilders.request(HttpMethod.GET, "/lala")) .andExpect(status().isOk());
    }

}

查看更多

提问者
snpst_tm_123
被浏览
17
Deadpool 2020-02-06 06:43

默认情况下@SpringBootTest,在模拟环境运行,因此未分配端口,docs

另一种有用的方法是根本不启动服务器,而仅测试下一层,Spring在该层处理传入的HTTP请求并将其交给您的控制器。这样,几乎使用了整个堆栈,您的代码将以与处理真实HTTP请求完全相同的方式被调用,而无需花费启动服务器的费用

因此,MockMvc它并没有指向wiremockport(8070)的确切含义404如果您想用Wiremock进行测试,可以HttpClients这里一样使用

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet request = new HttpGet("http://localhost:8070/lala");
HttpResponse httpResponse = httpClient.execute(request);

或者,你可以只是嘲笑任何服务从控制器调用诸如所示采用弹簧引导网络集成测试功能,在这里