【问题标题】:Grails Mocking: Supply any argument to demand closureGrails Mocking:为需求关闭提供任何论据
【发布时间】:2018-02-15 16:45:18
【问题描述】:

我正在尝试测试一项服务。在这个服务里面是另一个我想模拟的UserAPIService。为了模拟它,我正在执行以下操作:

    given:
    def userAPIServiceMock = mockFor(UserAPIService)
    userAPIServiceMock.demand.createUser { def apiToken, firstname, lastname, email -> return true 
    }
    service.userAPIService = userAPIServiceMock.createMock()

在需求闭包中,我并不关心传递给createUser 方法的参数。有没有办法我可以说“无论传递给 createUser 方法的参数如何,都返回 true。”

也就是说,我该如何改变

userAPIServiceMock.demand.createUser { def apiToken, firstname, lastname, email -> return true 

userAPIServiceMock.demand.createUser { [any arguments] -> return true 

【问题讨论】:

    标签: grails groovy mocking


    【解决方案1】:

    Spock 可以做到这一点。

    语法如下:

    mock.method(*_) >> { args -> true }
    

    不确定您的 Grails 服务需要如何模拟,但这里有一个完整的 Spock 通用示例:

      interface Service {
        boolean hej( String s, boolean b, char c )
      }
    
      class ExampleSpec extends Specification {
    
      def "mock method with any number of args"() {
        when:
        def mock = Mock( Service )
        mock.hej(*_) >> { args -> true }
    
        then:
        mock.hej( 'hi', true, 'a' as char ) == true
      }
    }
    

    args 是一个包含实际参数的List,您可以在闭包中对其进行检查并返回适当的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2021-12-18
      • 2015-07-22
      • 1970-01-01
      相关资源
      最近更新 更多