如何在开发过程中更新/重置 Pact 交互?

问题描述 投票:0回答:1

我在开发过程中经常遇到这个问题,在 Windows 上本地运行 PactNet,我不确定是否有更好的方法来处理它。

这是我的场景......

  • 我写了一个新的单元测试,它建立了一个带有样本请求和应该返回的正文的契约
Contract.MockProviderService
    .UponReceiving("...example description...")
    .Given("...example state...")
    .With(ProviderServiceFactory.Request(HttpVerb.Get, "/endpoint"))
    .WillRespondWith(ProviderServiceFactory.Response(200, new {
        some_value = 22
    }));
  • 我至少运行一次测试。也许通过了,也许失败了。
  • 我决定对退回的尸体进行更改。也许我发现了一个错误,或者我改变了我想要它返回的示例数据的想法。
Contract.MockProviderService
    .UponReceiving("...example description...")
    .Given("...example state...")
    .With(ProviderServiceFactory.Request(HttpVerb.Get, "/endpoint"))
    .WillRespondWith(ProviderServiceFactory.Response(200, new {
        some_value = 123
    }));
  • 我尝试再次运行我的测试,Pact 返回一个错误,抱怨我已经定义了与不同主体的交互:

具有相同描述的交互(“...示例描述...”)和 提供者状态(“...示例状态...”)但不同的响应主体 已经被使用了。请使用不同的描述或供应商 状态,或删除交互中的任何随机数据。

是的......我知道,我想改变身体但保持描述和提供者状态不变。

似乎我所能做的就是在我再次运行测试之前对我的描述和/或提供者状态进行一些任意更改。或者我必须重新启动我的机器以使 Pact 服务器恢复到干净状态。

有没有更简单的方法告诉 Pact 服务器擦除并重置所有先前定义的交互?也许我可以在单元测试会话开始时调用它?

只是看看可用的方法,我试过

MockProviderService.ClearInteractions()
MockProviderService.Stop(); MockProviderService.Start();
没有运气。

c# .net pact
1个回答
0
投票

您使用的是什么版本的 Pact .NET?如果使用 4.x.x 或更高版本,您需要清除契约文件,因为它总是将交互合并到契约文件中,默认情况下不会覆盖交互。

根据问题,我认为您使用的是以前的版本。

有没有试过提前清空pact文件?您是指定写入模式还是使用默认模式(覆盖)?

要么那样,要么我必须重新启动我的机器以使 Pact 服务器恢复到干净状态。

这绝对不是预期的,并且告诉我 Pact Mock 服务器 not 在测试运行之间正确关闭。

你试过升级到最新的吗? 4.x.x 不需要所有这些额外的生命周期方法,应该可以简化很多设置。

© www.soinside.com 2019 - 2024. All rights reserved.