我有一个用于弹簧启动微服务的集成测试。问题是服务在启动时调用外部服务(通过REST)。我正在使用WireMock来模拟通话。 Spring使应用程序在WireMock启动之前启动。因此,其余的呼叫失败,服务也失败了。
电话是由我们公司制作的图书馆制作的,所以我不能在那里改变任何东西。
侯对我有什么建议吗?
答案 0 :(得分:4)
您可以在测试中创建WireMockServer的静态实例。这是一个代码示例:
@RunWith(SpringRunner.class)
@SpringBootTest
public class YourApplicationTests {
static WireMockServer mockHttpServer = new WireMockServer(10000); // endpoint port here
@BeforeClass
public static void setup() throws Exception {
mockHttpServer.stubFor(get(urlPathMatching("/")).willReturn(aResponse().withBody("test").withStatus(200)));
mockHttpServer.start();
}
@AfterClass
public static void teardown() throws Exception {
mockHttpServer.stop();
}
@Test
public void someTest() throws Exception {
// your test code here
}
}
答案 1 :(得分:1)
Spring Boot团队已经构建了一个WireMock集成。可能值得一试,而不是自己动手:http://cloud.spring.io/spring-cloud-static/spring-cloud-contract/1.1.2.RELEASE/#_spring_cloud_contract_wiremock
答案 2 :(得分:0)
我在这里参加聚会很晚,但是我已经在同一件事上挣扎了好几次,虽然可以接受的答案在很多情况下都可以使用,但这是我想出的解决方案:
https://github.com/ThomasKasene/wiremock-junit-extension
这是一个自定义的JUnit Jupiter扩展,您将其放在测试类中,它将为您启动服务器,就像Spring Cloud Contract的版本一样。区别在于它与Spring上下文分离,因此可以在Spring旋转上下文之前启动它。