当前位置: 首页 > 知识库问答 >
问题:

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

潘英豪
2023-03-14
1 * classToTest.methodName(_) >> stubbed_return_value
1 * classToTest.methodName(_)

如何使用Spock截尾void方法?

共有1个答案

麻鸿熙
2023-03-14

您可以使用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 == []
    }
}
 类似资料:
  • 我正在尝试使用codeception和他的Mock和Stub库运行测试。发生的事情是,当我试图用存根运行测试时,它引发了一个在我的实际类中实现的错误。 我认为存根是隔离测试和模拟真实对象的方法。为什么它叫我真正的方法? 所以当我运行代码欺骗(PHPcodeception.phar运行): 问题是: 回溯会一直持续到类LoadAVG的真正实现,在这里我真正调用了rewind()函数,很明显,一旦这个

  • 我的测试代码: 唯一注册的是对PopulateEdgeInfo的调用。有什么明显的我做错了吗?也试图用模拟代替间谍,但没有用。

  • 我在micronaut中有以下接口来执行HTTP POST请求: 我有一个调用接口的类: 我想在我的spock测试中模拟/存根API调用,我尝试了以下方法: 然而,我得到的错误:

  • 我编写了一个Groovy扩展库,它为List类添加了额外的方法。我试图用Spock编写测试,但我无法让我的一些测试工作。 代码 有人能解释一下为什么Spock认为没有被调用吗?还是我错过了什么? 谢了。

  • 问题内容: 我正在使用Mockito测试旧版JAAS / LDAP登录模块。 该接口定义了以下功能: 我期望包含一个,这是需要进行操作才能通过测试的对象。 有没有一种方法可以有效地对此进行模拟,或者我可以通过实施存根实现更好呢? 问题答案: 对于返回的函数,请使用doAnswer() 和执行拦截必须在作为参数,例如,作为一个匿名类: 在这种情况下将是数组!

  • 我正在使用某个抛出异常的库,并希望测试在抛出异常时我的代码行为是否正确。将其中一个重载方法截尾似乎不起作用。我得到了这个错误:Stubber不能应用于void。不存在变量类型T的实例类型,因此void确认为T