gpt4 book ai didi

java - 如何在 groovy spock 测试中返回模拟列表

转载 作者:行者123 更新时间:2023-11-30 07:51:36 25 4
gpt4 key购买 nike

我在从 Spock Groovy 模拟接口(interface)返回所需对象列表时遇到问题:

public interface SomeRepository {
List<SomeObject> getAll();
}

所以我想在类里面模拟一下:

@CompileStatic
class SomeProcessor {
private final SomeRepository repository

SomeProcessor(SomeRepository repository) {
this.repository = repository
}

List<SomeObject> getAll() {
return repository.all
}
}

我有那个测试:

class SomeProcessorSpec extends Specification {
private final SomeRepository repository = Mock(SomeRepository)

@Subject private final SomeProcessor processor = new SomeProcessor(repository)

def 'should collect items from repository'() {
given:
List<SomeObject> expected = [new SomeObject(), new SomeObject()]
repository.all >> expected

when:
List<SomeObject> actual = processor.all

then:
assertEquals(expected, actual)
}
}

当我尝试运行该测试时,出现断言错误:

junit.framework.AssertionFailedError: Expected :[com.example.SomeObject@1fa268de, com.example.SomeOjbect@4f6ee6e4] Actual :null

所以这意味着它从 repository.all 方法返回了 null 而不是我预期的列表,这让我感到困惑。问题是:在使用 spock 和 groovy 进行测试时如何从模拟实例实际返回列表?

最佳答案

您可以尝试将 stub 部分移至交互检查阶段,例如

def 'should collect items from repository'() {
given:
List<SomeObject> expected = [new SomeObject(), new SomeObject()]

when:
List<SomeObject> actual = processor.all

then:
1 * repository.all >> expected

and:
expected == actual
}

此外,您不必使用 JUnit 的 assertEquals - Groovy 允许您使用 == 运算符比较两个对象。

我已经在简单的基于 Spock 的应用程序中检查了您的示例,它运行良好。我用 Spock 0.7-groovy-2.01.0-groovy-2.41.2-groovy-2.4-SNAPSHOT 测试了它,与所有 Spock 一起工作版本。无论如何,我过去遇到过一些类似的问题,并且在这些情况下,交互检查起到了作用。希望对您有所帮助。

关于java - 如何在 groovy spock 测试中返回模拟列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46828006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com