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

Spock模拟方法没有返回正确的值

储思聪
2023-03-14

给定一个类Foo

Foo {
    boolean bar() {}
}

为什么我用Spock来嘲笑Foo

Foo fooInstance = Mock(Foo)
fooInstance.bar() >>> [true, true, true]

调用fooInstance.bar()总是返回false?

不确定这是否有区别,但测试是在Groovy/Spock中进行的,而Foo是在Java8中进行的。

共有1个答案

欧阳何平
2023-03-14

按照我的预期工作,下面是代码(我必须修复您的Foo类,这样它就可以通过抛出RuntimeException进行编译--但是当测试运行时,您永远不会看到这一点):

/* In Groovy 2.4 */
import spock.lang.Specification

class FooTests extends Specification {

    def "test that bar always returns true"(){
        given: "a mock Foo"
        def mockFoo = Mock(Foo)
        mockFoo.bar() >>> [true, true, true]

        when: "we call bar 3 times"
        def result1 = mockFoo.bar()
        def result2 = mockFoo.bar()
        def result3 = mockFoo.bar()

        then: "the result should always be true"
        result1 == true
        result2 == true
        result3 == true
    }
}

/* In Java 8: */
class Foo {
    boolean bar() {
        throw new RuntimeException("should not happen");
    }
}

将三个固定返回值中的任何一个更改为false,测试将失败。希望有帮助!

 类似资料:
  • 我在这件事上纠结了一段时间。是否可以模拟新URL(URL)。openStream()返回一个文件。广州?我正在使用斯波克来尝试这样做。 测试类 或者我最好编写一个私有方法来返回流?

  • 我正在尝试单元测试我的类,它看起来像:- 我想在类B中模拟“method2()”。我知道我们需要有一个B()的mock对象,这样每当我们调用它的方法时,就会发生模拟。这是我试过的 并使用调用它,现在的主要问题是method2被嘲弄了(即method2()的主体没有被执行),但我无法接收C的对象作为响应。 我的测试场景是:- 我想测试类A的method1(),它反过来调用类B的method2(),但

  • 问题内容: 我有一个我以前从未见过的问题,猫鼬的findByIdAndUpdate没有在回调中返回正确的模型。 这是代码: 数据库中的原始文档如下所示: 进入的updateObj如下所示: 从回调返回的模型与原始模型相同,而不是updatedObj。如果我查询数据库,它已正确更新。它只是没有从数据库中返回。 这感觉像是一个“愚蠢的用户”错误,但我看不到它。任何想法表示赞赏。 问题答案: 在Mong

  • 问题内容: 我使用mysql 5.7 我想将联接表的结果串联到单列中。我使用包裹在函数中的函数。这是查询 列包含来自联接表的数据。数据已正确检索,但问题是列未转换为正确的JSON。 如您所见,最后有点“切”。 我也尝试过,但是现在它不能转换为正确的数组。它看起来像字符串太大,不适合列。有办法解决吗? 更新 问题必须出在不适合列的st大小中。我尝试从联接表中选择较少的列,并且它可以正常工作。也许有一

  • 我对Mockito很陌生。我想为下面的方法编写一个mock。我该怎么写?我的模拟方法会是什么样子?

  • 我有一个测试类包含测试方法和两个服务类和。我正在为类中的方法编写JUnit测试,该类包括对类方法的调用。在我写的测试方法中 因此,当调用时,它应该返回大小为1,但不返回此列表,返回的是一个大小为0的列表。