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

Spock在模拟对象上调用setProperty('x','test')而不是setX('test')

张献
2023-03-14

我们有Foo和Bar课:

class Foo {
    String x
}
class Bar {
    void call(Foo foo, String x) {
        foo.x = x
    }
}
void 'test' {
    setup:
    mockFoo = Mock(Foo)
    when:
    new Bar().call(mockFoo, 'test')
    then:
    1 * mockFoo.setX('test')
}

但是在结果中,我们观察到test由于“调用太少”而失败,并显示有mockfoo.setproperty('x','test')调用。此问题发生在CI环境中。在本地机器上一切正常。将test更改为setproperty('x','test')会导致本地失败。有人能解释一下如何处理这样的问题吗?

共有1个答案

楚翰
2023-03-14

我最近修复了Groovy3中的这个bug。Groovy2.4仍然保留使用SetProperty的旧行为。

此外,indy vs default可能会在指令选择上产生差异。

 类似资料:
  • 所以我想做一些事情 但我得到了空异常

  • 我目前正在为一个groovy应用程序编写单元testcase 有人能告诉我这是不是嘲弄斯波克的两个电话的正确方法?如果没有,那么请引导我走向正确的解决方案。

  • 注意:这个示例非常简单,但它得到了我想要实现的跨越的想法。 我有一个类(称为),它接受作为构造函数参数;它有一个方法,该方法生成一个执行以下操作的新线程(为简洁起见,大大减少了): 在正常操作中,调用会阻塞,直到与建立连接为止。 但这让我产生了错误的感觉;我不是真的在寻找至少一个互动,我真的在寻找一个互动。 我可以这样做(返回一次模拟的套接字,然后返回null): 但是,我仍然有大量对的调用,这些

  • 我有一个用注释的Groovy类,因此它得到一个私有的最终字段,我想测试它的用法。我想继续使用,而不是为了启用测试而进一步公开字段。 我正在使用Spock1.0编写测试,并尝试使用Spock的集成、模拟和截尾功能来完成测试。全局截尾可以帮助我截取调用以获得实际的实例,因此我目前的猜测是: 有趣的是,拦截实际上起作用了,确认类实际上获得了名为“dummy”的类型“logger”的对象

  • 我试图为一个类编写一个单元测试,这个类使用带有库中的的Google vision API。问题是,由于某种原因,我的模拟仍然调用真正的方法,然后抛出一个NPE,这破坏了我的测试。我以前从未在模拟上见过这种行为,我想知道我是不是做错了什么,是不是Spock/Groovy中有bug,还是与Google lib有关?

  • 我正在用Spock、Groovy和Geb编写UI功能测试,实现页面对象模式。在我的事件流中,我从当前页面导航以获得结果,因此,我需要在测试中切换页面对象,但我成功地做到了 下面的测试用例: