gpt4 book ai didi

Grails spock-如何模拟/ stub 类的特定方法

转载 作者:行者123 更新时间:2023-12-02 15:20:54 24 4
gpt4 key购买 nike

我正在为 Grails 项目编写 Junit 测试用例。

这里我使用 Spock 框架来编写测试用例。

在这里,我正在尝试测试以下方法。

但我想模拟/ stub rest.post 方法。我不想调用传递的实际网址。

 def RestResponse restPost(String url, Map headerMap, Map jsonDataMap) {
RestBuilder rest = new RestBuilder()
RestResponse response = rest.post(url) {
headerMap.each { k, v -> header(k, v) }
header('contentType', 'application/json')
header('Accept-API-Version', 'resource=2.0,protocol=1.0')
if (jsonDataMap)
json(jsonDataMap)
}
response
}

我尝试使用 MockFor。它正在调用实际的网址。
   void "test restPost"() {
setup:
RestResponse resMock = new RestResponse()
def httpBuildMock = new MockFor(RestBuilder)
httpBuildMock.demand.post(_) >> resMock

when:
def url = "http://testme"
def headerMap = [
'Authorization': 'Basic ' + 'encodedStr'
]
def dataMap = [
'operation': 'replace',
'field' : 'userPassword',
'value' : 'devicePassword'
]
RestResponse res = service.restPost(url, headerMap, dataMap)

then:
res
}

那么如何模拟/ stub 类的特定方法呢?

最佳答案

您可以创建一个单独的方法来创建 RestBuilder 所以 createRestBuilder 然后在每次调用此方法时返回一个模拟:

   def RestResponse restPost(String url, Map headerMap, Map jsonDataMap) {
RestBuilder rest = createRestBuilder()
RestResponse response = rest.post(url) {
headerMap.each { k, v -> header(k, v) }
header('contentType', 'application/json')
header('Accept-API-Version', 'resource=2.0,protocol=1.0')
if (jsonDataMap)
json(jsonDataMap)
}
response
}

然后定义服务
def service = Spy(ServiceClass) {
// stub a call on the same object
createRestBuilder() >> Mock(RestBuilder)
}

关于Grails spock-如何模拟/ stub 类的特定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36697686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com