我有Spring应用程序。
我们有服务向外部服务发出HTTP请求。现在我考虑在这个功能上编写单元测试。我想写集成测试。因此,我想知道服务请求是正确的。
春天有办法吗? (实际上我也不知道如何在春天以外的地方做到这一点)
答案 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/