Grails mock : Supply any argument to demand closure

标签 grails groovy mocking

我正在尝试测试一项服务。该服务内部是另一个我想要模拟的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 

最佳答案

这对于 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,您可以在闭包中检查这些参数并返回适当的值。

关于Grails mock : Supply any argument to demand closure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48812287/

相关文章:

unit-testing - 如何使用 LLBLGen 进行模拟

Python - 使用多个值模拟对象的属性?

gradle - 无法将Jar从Grails war 中排除

grails - 将数据挖掘 SQL 查询转换为 Grails 等效项?

groovy - 如何引用gradle脚本中定义的字段?

variables - 如何将 GPath 与变量一起使用?

rest - 如何使用Grails REST客户端构建器插件指定内容类型?

hibernate - Grails生成的 hibernate 定义

groovy - 使用 groovy 脚本创建可执行 jar

c++ - 哪些模拟框架允许对遗留代码进行零更改?