如何以及是否使用 Pact 测试语法(错误请求)验证?

我开始使用 Pact(在 Java 上)进行合同测试。


我已经阅读了关于 Pact 最佳实践的合同测试与功能测试,但我有点困惑。


示例:创建资源 (POST) 的简单 REST 端点,成功时返回 201 Created,语法验证错误返回 400 Bad Request。请求正文类似于:


{

    "firstname" : "Foo",

    "lastname" : "Bar"

}

双方firstname并lastname不能为空。据我所知,我可以在这里写 3 个场景,其中提供者应该返回 400 Bad Request:


firstname是空白,lastname不是空白

firstname不是空白,lastname是空白

firstname并lastname有两个空白

问题是如果只定义了“快乐路径协议”,模拟服务器会返回 500 内部服务器错误,如果我想让它返回 400 错误请求,我必须编写所有可能的协议。此外,如果我添加具有相同验证规则的另一个字段,则协议数量会激增。


首先,我应该在我的消费者身上测试这些场景吗?

如果是,是否存在使用 Pact DSL 实现它的任何智能方法?

谢谢你。


繁星淼淼
浏览 174回答 2
2回答

jeck猫

当我为 POST 建立合同时,我关心服务器接受有效输入以及服务器对错误输入的响应方式(通常为 400)。没有必要为输入可能无效的所有可能方式签订合同,主要是因为这可能由于无数原因而发生。因此,从消费者的角度来看,我通常只有一个无效输入的合同,除非我面临一种非常特殊的情况,即服务器可能会根据失败的原因做出不同的响应,并且我关心不同的响应。对于您的具体情况,请仅针对上述三种情况之一编写合同。

明月笑刀无情

在您的案例中,功能与契约讨论的核心信息是:那些不愉快路径的排列属于您的提供者代码,因为这就是逻辑所在。正如@fabricio-lemos 所说,您只需要封装一个 400 错误请求的示例,以证明您的代码可以处理这种情况。至于 500 错误,这可能是因为您没有为每个测试设置单一的预期交互(通过 Pact DSL)。如果在注册预期交互之前点击 Pact 模拟服务器,则会得到 500。在伪代码中,您的测试结构可能看起来像Describe "User API"  BeforeAll     setup Pact mock server  AfterEach     verify and clear interactions   With valid request     setup 201 interaction     run tests  With invalid request     setup 400 interaction     run tests 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java