使用 Spock 在 Spy 对象中存根一个 void 方法
Stub a void method in a Spy object with Spock
我正在使用 Spock,我的 class 测试被包裹在 Spy 中。
我想隔离被测试的方法,所以我试图排除从被测试的方法调用的其他方法。
通常我会使用这样的东西:
1 * classToTest.methodName(_) >> stubbed_return_value
我的问题是:methodName
是一个 void 方法。
我试过这个:
1 * classToTest.methodName(_)
但实际方法仍然被调用。
如何使用 Spock 去除 void 方法?
你可以用 null
...
存根
给定以下 Java class:
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;
}
}
我们想隐藏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 == []
}
}
您还可以 return 空闭包(而不是 null):
1 * complex.sideEffect(_) >> {}
我正在使用 Spock,我的 class 测试被包裹在 Spy 中。 我想隔离被测试的方法,所以我试图排除从被测试的方法调用的其他方法。 通常我会使用这样的东西:
1 * classToTest.methodName(_) >> stubbed_return_value
我的问题是:methodName
是一个 void 方法。
我试过这个:
1 * classToTest.methodName(_)
但实际方法仍然被调用。
如何使用 Spock 去除 void 方法?
你可以用 null
...
给定以下 Java class:
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;
}
}
我们想隐藏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 == []
}
}
您还可以 return 空闭包(而不是 null):
1 * complex.sideEffect(_) >> {}