gpt4 book ai didi

java - 如何在 Spock Groovy 的 THEN 阶段中预期的模拟方法调用后设置变量?

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

我想用 Spock Groovy 测试我的 Java 服务,这个服务有点棘手,因为方法调用返回一个值并且还更改变量的内容 传递给方法。

因为我想模拟这个方法调用,所以我需要以某种方式告诉 Spock,当该方法被执行时,返回一个特定的值并更改传递变量的内容。

像这样:

given: "list with one element"
List<String> list = ["mock"]

when: "executing the service call"
service.execute(list)

then: "external method is called, which updates the passed variable and returns true as success"
1 * external.addOneMoreToList(list) >> true
and: "list is updated successfully"
list.size == 2
list.get(1) == "mock 2"

但我不知道在哪里以及如何通过添加下一个元素来更新列表:“mock 2”。

我知道这个例子没有意义,但我不想写我真正的测试用例,因为它很大,但我需要类似的ad-hoc-update

最佳答案

使用闭包而不是简单的交互值,如下所示:

1 * external.addOneMoreToList(list) >> { list ->
list << 'mock 2'
return true
}

一些惯用的注释:

  • 实际上没有必要return true在这种情况下,因为(假设您的返回类型是 boolean )Groovy 将认为非空列表是真实的。说清楚仍然是个好主意。

  • 与在 JUnit 中一样,预期值在前,然后是实际值 ( 2 == list.size() )。

  • 您可以索引到 List[] : 'mock 2' == list[1] .

  • 在可行的情况下使用随机值是个好主意,例如您的 'mock 2'值,因为这有助于防止意外通过。您可以在 given 中设置变量阻止并在交互中使用它们;我通常使用 commons-lang3 RandomStringUtils .

并尝试在任何可行的范围内精简您的测试用例! Spock 友好的交互模拟使得为可能过于复杂的接口(interface)使用测试替身变得不那么痛苦,扩展交互可以成为 @Stepwise 的合理用例。 (我已经将它用于具有多步场景的 Selenium 测试)。

关于java - 如何在 Spock Groovy 的 THEN 阶段中预期的模拟方法调用后设置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57990037/

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