Grails / Groovy模拟第三方对象的动态属性

时间:2014-02-17 01:31:26

标签: unit-testing grails groovy mocking

def client = new SOAPClient("http://...")
def response = client.send(
    """<?xml version='1.0' encoding='UTF-8'?>
       <soap-env:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'>
           <soap-env:Body>
               <GetFoo>bar</GetFoo>
           </soap-env:Body>
       </soap-env:Envelope>"""
)
return response.xmlElement1.xmlElement2.xmlElement3.text()

这是我项目中的一条服务代码。 def响应是一个名为HTTPResponse的WsLite库的对象。

在我的单元测试中,我想将此响应模拟为此代码的一部分:

def mockClient = Mock(SOAPClient)
        mockClient.send(XML_REQUEST) >> createMockResponse()

我不太确定如何模拟此响应对象并填充一些预期值。

例如,response.xmlElement1.xmlElement2.xmlElement3.text()的模拟回复是'ABC'。

1 个答案:

答案 0 :(得分:2)

将返回映射的响应存储为具有预期返回值的模式

mockClient.send(XML_REQUEST) >> {
    [ xmlElement1: [ xmlElement2: [ xmlElement3: [ text : { 'ABC' } ] ] ] ]
}

assert response.xmlElement1.xmlElement2.xmlElement3.text() == 'ABC'