unit-testing - 使用指定的超时验证 Spock 模拟

标签 unit-testing testing mocking spock

在 Mockito 中,有一个选项可以验证是否已调用 mock 方法,并指定此验证的超时时间 (VerificationWithTimeout),例如:

verify(mock, timeout(200).atLeastOnce()).baz();

在 Spock 中是否有任何等效的功能?

最佳答案

我试图使用 PollingConditions 来满足类似的场景(这没有帮助),但我却在 Spock 的 BlockingVariables 中找到了满足感。 .验证 SomeService.method() 在给定的超时期限内至少在函数 ClassBeingTested.method() 中被调用一次:

def "verify an interaction happened at least once within 200ms"(){
    given:
        def result = new BlockingVariable<Boolean>(0.2) // 200ms
        SomeService someServiceMock = Mock()
        someServiceMock.method() >> {
            result.set(true)
        }
        ClassBeingTested clazz = new ClassBeingTested(someService: someServiceMock)
    when:
        clazz.someMethod()
    then:
        result.get()
}

设置结果后,将满足阻塞条件,并且 result.get() 必须返回 true 才能使条件通过。如果在200ms内没有设置成功,则测试失败,超时异常。

关于unit-testing - 使用指定的超时验证 Spock 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666874/

相关文章:

c++ - gmock 调用隐式删除的复制构造函数

javascript - 无法在 mocha 测试的上下文中调用 sinon spy ,方法是使用 promises 调用方法

javascript - 开 Jest ,测试输出字符串

python - 将 pytest 测试相互隔离

excel - 非常绿色的 VBA 用户,第 2 行以下的所有内容都有效,但如何使上面的内容有效?

node.js - nodejs - 模拟模块,天真的方法

regex - Wiremock 与正则表达式不匹配

ios - 显然,CLLocation 对象不能精确地归档/取消归档

ruby-on-rails - 为什么我需要使用 minitest/autorun?

sql-server - 数据库再次受到源代码控制!