0

我是 PACT 的新手,正在尝试使用 pact-net 进行 .net 微服务的合同测试。我了解生成协议文件的消费者测试的概念。提供者状态中间件的概念负责确保提供者的状态与生成的契约中的 Given() 条件匹配。我对以下内容或如何实现这一点有点困惑:

提供者测试针对实际服务运行。所以我们在运行测试之前启动提供者服务。我的提供者服务与数据库交互以存储和检索记录。PACT 还提到应该对服务的所有依赖项进行存根。

  1. 所以我们运行针对实际数据库运行的实际提供程序 api?
  2. 如果我们针对实际数据库运行 api,我们如何将数据注入数据库?我们是否应该使用提供者 api 自己的端点来添加 Given() 数据?
  3. 如果以上不是正确的方法,那是什么?

我遇到的所有基本博客文章都没有解释这一点,并且通常有没有提供者状态或只是文件系统上的一些文本文件的状态的示例。

帮助表示赞赏。

4

2 回答 2

2

我要补充一下马特的评论,你有三个选择:

  1. 使用连接的环境对您的提供商进行测试,但之后您必须手动进行一些清理,并确保您的数据始终在您的数据库中可用或/并且外部 API 始终启动并运行。编写简单,但可能很难维护。

  2. 您模拟您的 API 调用,但调用真实的数据库。

  3. 您模拟所有外部依赖项:API 和 DB 调用。

对于 2) 或 3),您将必须拥有测试路由并在您的提供者测试夹具中注入提供者状态中间件。然后,如果解决方案 3),您可以配置要调用的提供程序状态以生成内存数据,或者如果您在解决方案 2) 中,则添加一些 data-init)

你可以在这里找到一个例子:https ://github.com/pact-foundation/pact-net/tree/master/Samples/EventApi/Provider.Api.Web.Tests

于 2021-11-04T14:33:49.550 回答
1

提供者测试针对实际服务运行

您的意思是针对实时环境,还是针对单元测试在本地运行的实际服务(不建议使用前者,因为上面的(2))。

  1. 这是该规则的例外情况之一。您可以选择使用真正的数据库或内存中的数据库 - 任何最方便的。使用 docker 和类似的工具进行测试是很常见的。

  2. 在您的情况下,我将有一组特定的仅用于测试的路由来响应提供者状态处理程序端点,它们还可以访问存储库代码并可以操纵系统的状态。

于 2021-10-29T00:52:00.717 回答