【问题标题】:Mocking in Grails Spock integration testing在 Grails Spock 集成测试中模拟
【发布时间】:2016-05-13 12:56:08
【问题描述】:
我有 grails rest api 应用程序,它通过服务在内部调用外部 rest api。我想在进行集成测试用例时模拟外部 api 调用服务。在集成测试用例中,我将请求发布到应用程序 rest api。由于我无法模拟外部 API,因此如果无法访问外部 API,它将失败。
那么如何在集成测试用例中模拟调用外部 API 的服务。
【问题讨论】:
标签:
grails
spock
integration-testing
【解决方案1】:
在您的配置中包含指向外部 API 的 URL,以便您可以模拟它,假设它的配置密钥称为 myConfigValue。安装 WireMock 并包含一个测试服务器作为 JUnit 规则:
@Rule
WireMockRule mockServer = new WireMockRule(WireMockConfiguration.wireMockConfig().port(9900))
如the Grails manual 中所述,将模拟服务器的 URL 输入到您的测试中:
static doWithConfig(c) {
c.myConfigValue = "http://localhost:9900/"
}
然后使用 WireMock 的 API 来验证外部调用并存根响应,例如
stubFor(get(urlEqualTo("/binary-body"))
.willReturn(aResponse()
.withBody(new byte[] { 1, 2, 3, 4 })));
检查他们的文档以了解可能的情况。有 WireMock 的替代品,但没有一个对我们如此有效。