0

我正在使用Pact Go 实现来尝试合同测试。我进行了一个不起作用的提供程序测试,因为我需要模拟我的服务对 Twilio 的请求。

我为我的消费者和此提供者之间的合同创建了一个 Pact 对象,然后为我的提供者和 Twilio 之间的合同创建了另一个名为 twilioPact 的对象。我已将 POST 的交互添加到 Twilio 端点,但在 pact.log 中我没有看到它被注册。我的测试是正确地发出请求,但是没有为它注册交互,所以我从模拟服务器收到 500 错误。

有没有人有使用 Pact 与同时也是“消费者”的“提供者”的经验?

编辑:在与 Matt Fellows 交谈后,我被告知我使用 Pact 不正确,并且不应该在运行提供者验证时尝试运行模拟服务。我也有同样的怀疑,但我所看到的例子都不是针对具有依赖关系的提供者。通过编写消费者测试并将生成的 pact 文件传递​​给 pact-stub-service 以充当 Twilio 的模拟,我能够让我的提供者验证工作。

4

1 回答 1

2

这里有几点需要考虑:

  1. 最好在client<->Twilio AdapterTwilio Adapter <-> Twilio. 可以做你正在做的事情,但它会使测试更复杂,可能更难阅读/理解。单独测试它们可以为您提供更多控制权。
  2. 在进行前一个合同测试时,而不是为您的 Twilio 适配器(提供者)依赖项(Twilio)菊花链另一个协定模拟服务,您最好使用标准模拟/存根工具来完成这项工作 - 基于代码的模拟/双打,服务双打(例如 Mountebank)或 Pact [1] 附带的存根服务器。不要忘记您将通过其他合同测试来验证这些假设,因此您可以安全地执行此操作。
  3. 有可能是因为您有两个模拟服务器正在运行(一个用于模拟 Twilio 适配器,另一个用于模拟 Twilio),您的请求被发送到同一个模拟服务,并且所有这些都被纠缠在一起

[1] 以下是 pact-go 附带的二进制文件等的列表:

    tree -L 3 /path/to/pact-go

    .
    ├── pact
    │   ├── README.md
    │   ├── bin
    │   │   ├── pact-broker
    │   │   ├── pact-mock-service
    │   │   ├── pact-provider-verifier
    │   │   ├── pact-publish
    │   │   └── pact-stub-service
    │   └── lib
    │       ├── app
    │       ├── ruby
    │       └── vendor
    └── pact-go
于 2018-03-15T10:39:15.770 回答