你可以只是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;
}
}
我們想隱藏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 == []
}
}
只是爲了防止任何人像我一樣無知:在Spock中,你不能嘲笑私有方法:他們會像間諜一樣正常運行。我發現Spock的這個「限制」(實際上是因爲它沒有使測試意義)令人驚訝,因爲你可以從你的Spy中調用這些方法(並且似乎嘲笑它們)在你的測試代碼中。如果Spock可以拒絕這個或者將其標記爲錯誤,那麼可能會很好。 –