我正在尝试使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());
}
}
默认情况下@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);
或者,你可以只是嘲笑任何服务从控制器调用诸如所示采用弹簧引导网络集成测试功能,在这里