gpt4 book ai didi

java - Spock-Test-Framework 中的 Mock-Signature 似乎与文档中的不同

转载 作者:行者123 更新时间:2023-12-02 11:14:56 25 4
gpt4 key购买 nike

在 Spock-Docs 中,使用构造函数参数的 Mock/Spy/Stub 具有以下签名:

def subscriber = Spy(SubscriberImpl, constructorArgs: ["Fred"])

(参见:http://spockframework.org/spock/docs/1.1/all_in_one.html#Spies)

但是,在 spock.mock.MockingApi 中,每个 Spy/Mock/Stub 都有多个签名,但如果它们有其他参数,则它们有一个映射作为第一个参数,然后是要模拟的类,例如

public <T> T Spy(Map<String, Object> options, Class<T> type)

现在我有两个问题:

1) 如果我按照文档中的顺序使用 Groovy/Spock 如何进行测试?因为实际上,它有效......

2) 在 IntelliJ 从 2017.3 更新到 2018.1 后,我遇到了整个问题,此后 IntelliJ 拒绝接受 Subscriber(在上面的示例中)作为 SubscriberImpl 类型的对象,这是在更新之前所做的 - 代码不变...如果我扭转局面并添加另一个 Bracket 和“as Map”,一切都会正常,因为这与 MockingApi 中的代码非常接近:

def subscriber = Spy([constructorArgs: ["Fred"]] as Map<String, Object>, SubscriberImpl)

但是无论如何,它是如何通过更新来改变行为的以及它之前是如何工作的?也许有人可以缓解我的困惑......?

谢谢。

最佳答案

这是一个内置的 Groovy 功能​​,用于将命名参数转换为映射,请参阅

至于为什么IDEA的行为像你描述的那样,我不知道。我也在使用 IDEA 2018 并看到相同的结果。搜索 JetBrains bug 数据库,如果尚不存在则创建一个。无论如何,这只是一个装饰性的问题,但如果能修复就太好了。顺便说一句,您还可以修复 IDE 的背景颜色,因为方法签名如下所示:

def subscriber = Spy(SubscriberImpl as Class, constructorArgs: ["Fred"])

或者像这样(更优雅,也更安全):

SubscriberImpl subscriber = Spy(constructorArgs: ["Fred"])

关于java - Spock-Test-Framework 中的 Mock-Signature 似乎与文档中的不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50352809/

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