我有一项服务,我试图测试。在这个服务里面是另一个我想要模拟的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
答案 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
,您可以在闭包中检查它并返回适当的值。