我正在使用Spock,将要测试的课程包装在一个Spy中。我想隔离正在测试的方法,所以我试图从正在测试的方法中删除其他调用的方法。通常,我会使用类似以下的内容:
1 * classToTest.methodName(_) >> stubbed_return_value
Run Code Online (Sandbox Code Playgroud)
我的问题是:这 methodName是一个无效方法。我尝试了这个:
1 * classToTest.methodName(_)
Run Code Online (Sandbox Code Playgroud)
但是实际的方法仍然被调用。
如何使用Spock消除void方法?
你可以用null... 存根
给定以下Java类:
public class Complex {
private final List<String> sideEffects = new ArrayList<>();
protected void sideEffect(String name) {
sideEffects.add("Side effect for " + name);
}
public int call(String name) {
sideEffect(name);
return name.length();
}
public List<String> getSideEffects() {
return sideEffects;
}
}
Run Code Online (Sandbox Code Playgroud)
我们想要隐藏该sideEffect方法,因此它无法执行任何操作,因此我们可以使用以下规范:
class ComplexSpec extends Specification {
def 'we can ignore void methods in Spies'() {
given:
Complex complex = Spy()
when:
int result = complex.call('tim')
then:
result == 3
1 * complex.sideEffect(_) >> null
complex.sideEffects == []
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7788 次 |
| 最近记录: |