这些调用发生在管道应该成功运行时

Solve china dataset issues with shared expertise and innovation.
Post Reply
roseline371274
Posts: 943
Joined: Mon Dec 23, 2024 8:17 am

这些调用发生在管道应该成功运行时

Post by roseline371274 »

如果我们修改管道中的 maven 调用并运行测试,输出将与此非常相似:module_Maven('clean install')Copy


如您所见,Spock 抱怨说它在调用中预期的参数与它收到的参数不相等,因此它没有计算足够的调用来匹配约束。测试因此失败。

Spock 有一本非常详细的基于交互的测试手册,其中还列出了通配符和约束的所有其他可能性。如果您想了解更多相关信息,请阅读此文!

快乐流测试
我们在此处测试的管道有多次调用,。我们想要检查所有这些,当我们这样做时,它看起来会类似于此:


我偷偷使用了 Spock 的一个小额外功能,我使用通配符作为调用的参数约束。 Spock 的通配符版本是下划线 (_),因为星号 (*) 已经用于基数表示法。notificationMockCopy

雨天测试
通常,一切都运行良好,但我们的管道中也有一些处理步骤失 华人海外数据 败的逻辑。例如:当 maven 构建失败时,它将收集junit 测试结果,但不会运行下一阶段。
当然,我们很乐意通过测试来检查这一点。

那么我们如何让 Maven 构建在特定测试期间失败?这就是 Spock(在 Byte-Buddy 和 Objenesis 的一点点帮助下)模拟和存根的强大力量发挥作用的地方。
Spock 使我们能够定义 Stub 的行为,我们将使用它在测试期间的指定时刻抛出错误。


在我们的测试中,调用 Maven 会产生错误,我们不只是从 Stub 返回一个值,而且还必须在闭包的帮助下在我们的测试框架中设置一个值作为副作用:


then:
1 * mavenMock.call(_) >> {
      binding.getVariable('currentBuild').result = 'FAILURE'
    }
<span class="copy">Copy</span>
这是 Spock 的方式,使框架在 Maven mock/stub 上期望 1 次调用,其中参数实际上并不重要(只要只传递一个参数)。如果发生这种情况,则会执行闭包,并将变量设置为值“FAILURE”。currentBuildCopy

最后,管道会发现这一情况,将其解释为失败并将该步骤标记为失败,然后继续进行。

当这种情况发生时,我们希望验证工件不会发布到我们的二进制存储库管理器,并且用户会收到该管道的结果通知。
Post Reply