2016-05-13 184 views
1

我有Grails rest api應用程序,它通過服務在內部調用外部休息API。我想在執行集成測試用例時模擬外部API調用服務。在集成測試用例中,我將請求發佈到應用程序rest api。由於我無法模擬外部API,因此如果外部API無法訪問,則會失敗。 那麼如何在集成測試用例中模擬調用外部API的服務。嘲笑Grails Spock集成測試

+0

沒有任何代碼我們如何能夠建議問題在哪裏。 –

回答

0

在您的配置中包含外部API的URL,以便您可以嘲笑它,假設它的配置密鑰被稱爲myConfigValue。安裝WireMock,包括測試服務器作爲JUnit規則:

@Rule 
WireMockRule mockServer = new WireMockRule(WireMockConfiguration.wireMockConfig().port(9900)) 

訂閱模擬服務器的URL到您的測試就像在the Grails manual描述:

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有其他選擇,但沒有一個爲我們工作得很好。

+0

作爲WireMock的替代品,下面是使用其他庫Ratpack測試Grails 3應用程序的博客文章:http://kyleboon.org/blog/2015/07/18/stubbing-service-interactions-when-testing-microservices / –