如何在Spring应用程序中测试输出HTTP请求内容?

时间:2017-03-23 11:53:46

标签: java spring rest http spring-mvc

我有Spring应用程序。

我们有服务向外部服务发出HTTP请求。现在我考虑在这个功能上编写单元测试。我想写集成测试。因此,我想知道服务请求是正确的。

春天有办法吗? (实际上我也不知道如何在春天以外的地方做到这一点)

1 个答案:

答案 0 :(得分:0)

在测试中,您可以使用某种模拟服务器。例如Wiremock

Wiremock可以作为代理工作并记录您的所有请求和响应。不止于此 - 它可以保存响应并将其用作存根。使用多个故障模拟测试集成问题非常有用。

对于春季靴子,有一个起动器:

        <dependency>
            <groupId>com.epages</groupId>
            <artifactId>wiremock-spring-boot-starter</artifactId>
            <version>0.7.18</version>
            <scope>test</scope>
        </dependency>

此处提供了更多文档:https://github.com/ePages-de/restdocs-wiremock

然后创建一个测试并设置proxy

@RunWith(SpringRunner.class)
@EnableAutoConfiguration
@SpringBootTest(
    classes = {
            YourApplication.class,
    }
)
@WireMockTest // it comes from starter
public class YourTest {

    @Inject
    private WireMockServer server;

    @Value("http://localhost:${wiremock.port}")
    private String uri;


    @Test
    public void shouldLogAllTheThings() throws Exception {
       server.stubFor(get(urlMatching("/other/service/.*"))
           .willReturn(
                aResponse()
                    .proxiedFrom("http://otherhost.com/approot")
       ));

       // your call with rest template using uri field value
       // as base uri
    }


    @TestConfiguration
    public static class Internal {

        @Inject
        public WireMockConfiguration configuration;

        @PostConstruct
        public void wiremock() {
            // this adds verbosive logger 
            // which will print all communication
            configuration.notifier(new Slf4jNotifier(true));
        }
    }
}

更多信息: http://wiremock.org/docs/proxying/

可以使用此文档保存映射:http://wiremock.org/docs/record-playback/

如果您不想使用starter,可以使用wiremock作为JUnit规则: http://wiremock.org/docs/junit-rule/