【发布时间】:2026-02-03 06:35:01
【问题描述】:
我希望有不同的返回结果 - 取决于方法的给定模拟参数。请考虑以下代码 sn-p 以遵循我的意图
class ExampleSpec extends Specification {
def "should return second value of list of return values"() {
given:
Person personBob = Mock()
Person personJackson = Mock()
PersonHelper stubbedPerson = Stub()
stubbedPerson.getNameOfBrother(personBob) >> "Billy Bob";
stubbedPerson.getNameOfBrother(personJackson) >> "Tommy Jackson";
when:
String actual = stubbedPerson.getNameOfBrother(personBob)
String actual2 = stubbedPerson.getNameOfBrother(personJackson)
then:
actual == "Billy Bob" // true
actual2 == "Tommy Jackson" // false "Billy Bob"
}
}
测试失败,因为对 var actual2 的第二次调用仍然返回 Billy Bob 而不是 Tommy Jackson。我知道有一种方法可以通过调用顺序返回不同的值,但我想让它依赖于给定的模拟。
使用正常值 - 没有 Mock/Stub Proxies - 作为参数值确实有效。我假设 Spock 引擎在两个模拟之间没有区别。但我对此不确定,因为代理确实有 ID 作为实例字段。
【问题讨论】: