gpt4 book ai didi

unit-testing - 如何验证是否使用 Spock 中的一组指定元素调用了方法?

转载 作者:行者123 更新时间:2023-11-28 21:21:01 26 4
gpt4 key购买 nike

我在 Spock 中进行了测试:

def repository= Mock(Repository)

@Subject
def service = new Service(repository)

def "test"() {
given:
def results = [ /* does not matter */ ]

def element = XYZ

when:
def found = service.findByElement(element)

then:
1 * repository.findByElements(_ as Set) >> results
}

工作正常。但我想验证 repository.findByElements 方法是否采用我们特定元素的一个元素集。如何实现?

这都不是:

1 * repository.findByElements([element] as Set) >> results

也不是这个:

1 * repository.findByElements({ assert it == [element] as Set }) >> results

不起作用。

最佳答案

您可以使用 an argument constraint期望一个表示谓词的闭包。它看起来类似于您的第二个用例 - 唯一的区别是不需要 assert 关键字(谓词必须返回 bool 值)。变量 it 保存您的模拟方法在被调用时检索的参数值,因此您可以根据传递的值创建谓词。

def repository= Mock(Repository)

@Subject
def service = new Service(repository)

def "test"() {
given:
def results = [ /* does not matter */ ]

def element = new Element("XYZ")

when:
def found = service.findByElement(element)

then:
1 * repository.findByElements({ it == [element] as Set }) >> results
}

关于unit-testing - 如何验证是否使用 Spock 中的一组指定元素调用了方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51840043/

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