【问题标题】:Grails/Groovy mock dynamic properties for third party objects第三方对象的 Grails/Groovy 模拟动态属性
【发布时间】:2014-02-17 01:31:26
【问题描述】:
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 response 是一个名为 HTTPResponse 的 WsLite 库对象。

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

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

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

例如,response.xmlElement1.xmlElement2.xmlElement3.text() 的模拟响应是“ABC”。

【问题讨论】:

    标签: unit-testing grails groovy mocking


    【解决方案1】:

    使用预期的返回值模式存根返回映射的响应

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

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 2018-12-30
      • 2011-09-14
      • 1970-01-01
      • 2013-03-25
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      相关资源
      最近更新 更多