Java 如何在Spock Groovy中调用预期的模拟方法后设置变量?

Java 如何在Spock Groovy中调用预期的模拟方法后设置变量?,java,unit-testing,testing,groovy,spock,Java,Unit Testing,Testing,Groovy,Spock,我想用spockgroovy测试我的Java服务,该服务有点棘手,因为方法调用会返回一个值,并且还会更改传递给该方法的变量的内容 因为我想模拟这个方法调用,所以我需要以某种方式告诉Spock,在执行该方法时,返回一个特定的值并更改传递的变量的内容 大概是这样的: given: "list with one element" List<String> list = ["mock"] when: "executing the service call" service.execute(

我想用spockgroovy测试我的Java服务,该服务有点棘手,因为方法调用会返回一个值,并且还会更改传递给该方法的变量的内容

因为我想模拟这个方法调用,所以我需要以某种方式告诉Spock,在执行该方法时,返回一个特定的值并更改传递的变量的内容

大概是这样的:

given: "list with one element"
List<String> list = ["mock"]

when: "executing the service call"
service.execute(list)

then: "external method is called, which updates the passed variable and returns true as success"
1 * external.addOneMoreToList(list) >> true
and: "list is updated successfully"
list.size == 2
list.get(1) == "mock 2"
1 * external.addOneMoreToList(list) >> { list ->
    list << 'mock 2'
    return true
}
给定:“包含一个元素的列表”
列表=[“模拟”]
何时:“执行服务调用”
service.execute(列表)
然后:“调用外部方法,该方法更新传递的变量并返回true作为success”
1*external.addOneMoreToList(列表)>>true
和:“列表已成功更新”
list.size==2
list.get(1)=“模拟2”
但我不知道在哪里以及如何通过添加下一个元素“mock 2”来更新列表


我知道这个示例没有意义,但我不想编写真正的测试用例,因为它非常庞大,但我需要类似的临时更新

使用闭包而不是简单的值进行交互,如下所示:

given: "list with one element"
List<String> list = ["mock"]

when: "executing the service call"
service.execute(list)

then: "external method is called, which updates the passed variable and returns true as success"
1 * external.addOneMoreToList(list) >> true
and: "list is updated successfully"
list.size == 2
list.get(1) == "mock 2"
1 * external.addOneMoreToList(list) >> { list ->
    list << 'mock 2'
    return true
}
1*external.addOneMoreToList(list)>{list->

谢谢你的帮助,它为我的真实测试用例工作。