Grails Mocking:为需求关闭提供任何论据

时间:2018-02-15 16:45:19

标签: 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 

1 个答案:

答案 0 :(得分: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,您可以在闭包中检查它并返回适当的值。