我正在进行错误处理的测试。我希望第一次调用 mockedObject.foo()
时抛出一个新的 IOException,第二次调用时返回 bar。我尝试了以下代码:
mockedObject.foo() >>> [{throw new IOException()}, bar]
但是,当我运行测试时,出现一个错误,指出闭包无法转换为Bar,
FooSpec$_$spock_feature_0_1_closure2无法转换为Bar
我该如何使用Spock模拟这种行为?
编辑:在看到tim_yates引用的文档后,我只需将测试更改为:
mockedObject.foo() >>> firstBar >> {throw new IOException()} >> secondBar
这基本上接近了我需要测试的内容。以下代码抛出了相同的异常,因此我猜测Spock是根据第一个对象返回来设置模拟方法的返回类型。
mockedObject.foo() >>> {throw new IOException()} >> secondBar
foo()
方法长什么样子? - tim_yatesfoo()
调用中匹配参数。如果您不关心参数,则最安全的方法是使用mockedObject.foo(*_) >>> {throw new IOException()} >> bar
。请注意,在模拟时使用*_
。如果 foo 有一个参数,则mockedObject.foo(_) >>> {throw new IOException()} >> bar
应该可以工作。 - dmahapatro