使用Spock在Spy对象中存储void方法

时间:2017-02-28 15:25:30

标签: java groovy spock

我正在使用Spock,我的课程测试被包裹在间谍中。 我想隔离正在测试的方法,所以我试图找出从被测试方法中调用的其他方法。 通常我会使用这样的东西:

1 * classToTest.methodName(_) >> stubbed_return_value

我的问题是:methodName是一种void方法。 我试过这个:

1 * classToTest.methodName(_)

但仍然会调用实际方法。

如何使用Spock删除void方法?

2 个答案:

答案 0 :(得分:4)

您可以使用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 == []
    }
}

答案 1 :(得分:1)

您还可以返回一个空的闭包(而不是null):

document.createElement()