简介
我为Groovy中的Jenkins管道编写了一些代码,如下所示:
def sendNotifications (args) {
// ... use args ...
sendSlack(
failOnError: true,
color: '#00FF00',
message: "foo",
channel: "#mychan"
)
}
// slackMessage not shown returns a string based on the args.
这段代码似乎在我的管道中运行得很好。现在我想测试它。所以我创建了一个模拟sendSlack的函数,因为我不希望我的测试发送Slack消息,我想检查传递给sendSlack的参数是否是预期的。所以我这样做了:
void testStubbedSendNotifications(Map inputArgs, ArrayList slackArgs) {
def n = new Notifier()
def sendSlackArgs = []
n.metaClass.sendSlack = { Map x -> sendSlackArgs << x }
n.sendNotifications(inputArgs)
assert sendSlackArgs == slackArgs
}
这里发生的事情很简单。我没有调用sendSlack,而是将要调用的参数推送到ArrayList,然后检查以确保列表在断言中正确。所以这个函数接受调用sendNotifications的参数以及一个期望值列表,以便看到调用sendSlack作为结果。
问题
我的期望值仅在我的测试中被破坏。而不是像这样的哈希映射的参数:
[
failOnError: true,
color: '#00FF00',
message: "foo",
channel: "#mychan"
]
我反而得到了这个:
[
failOnError: true,
color: '#00FF00',
"message:foo" : null,
channel: "#mychan"
]
为什么消息的键和值会合并到密钥中?