如何在Spring启动应用程序状态之前运行wiremock?

时间:2018-01-02 18:25:35

标签: java spring-boot wiremock

我有一个用于弹簧启动微服务的集成测试。问题是服务在启动时调用外部服务(通过REST)。我正在使用WireMock来模拟通话。 Spring使应用程序在WireMock启动之前启动。因此,其余的呼叫失败,服务也失败了。

电话是由我们公司制作的图书馆制作的,所以我不能在那里改变任何东西。

侯对我有什么建议吗?

3 个答案:

答案 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旋转上下文之前启动它。