我是“开拓”整个公司使用契约的团队的一员。在此过程中,我们遇到了许多问题,这些问题主要是由于误解了CDC测试中协议的使用。随着时间的流逝,其中许多问题可能会得到解决,但是仍然有一些主要问题,我找不到任何好的解决方案或示例。由于我认为回答这些问题是非常基本的,因此我认为尝试直接与您联系可能会对我们有所帮助。
答案 0 :(得分:3)
我认为多个提供者状态背后的主要思想是订单和代码的可重用性。想象一下,您的消费者定义了与以下提供者状态的2种交互:
这两个状态在它们之间共享一些逻辑,因此像这样设置提供程序状态会很快变得混乱。相反,将以下状态映射到分别设置每个状态的代码会更好:
如果回头看上面的示例,您会发现提供商现在与ID 123的用户非常耦合。如果消费者决定将其更改为ID 456,这将破坏提供商的设置实施。因此,想法是将“ 123”作为参数传递,而不是在状态描述字符串中传递。该协定将如下所示:
"providerStates": [{
"name": "The user exists",
"params": {"id" : 123}
}]
答案 1 :(得分:2)
除了西蒙回答的是什么
答案 2 :(得分:2)
首先,我想说很高兴您主动为整个公司试用Pact:)
我们正在努力改善Pact的沟通方式,因为我们了解到解决或传递给其他开发人员不是一个简单的问题。您对改善文档/网站的任何建议将不胜感激。
现在,进入以下问题:
实施提供程序测试时,应在应用程序的哪个“层”上实施测试?
协议实际上试图替换/增强集成测试,或者某些人会在提供者方面考虑功能测试。但是,对于某些公司/团队而言,这种命名方式的翻译效果并不理想,因为有些公司/团队会使用“功能”测试作为通过浏览器进行的端到端测试。
从本质上讲,Pact可以替换您过去以特定方式攻击提供商的任何测试,然后验证输出,因为这实际上是Pact所做的;这样做的主要优点是,它不是基于提供者的开发人员认为这些输入/输出应具有的功能,而是着重于消费者实际使用它的方式。
问题:使用多个提供者状态背后的想法是什么?
正如Simon所言,多个提供者状态只是一种促进数据重用和防止开发人员反复重做样板代码的方法。从本质上讲,这只是一种以可重复的方式设置数据需要的方式,而不是浪费时间为每个状态创建数据。话虽这么说,有时您的提供程序非常简单,以至于根本不需要此功能。
问题:参数化提供者状态背后的想法是什么?
参数是将某些可变数据注入状态(例如ID)的一种快速简便的方法,交互操作可能需要检查该数据是否完全相同,或者还可以将其与多个状态一起使用来创建ID。具体情况,例如“创建ID为X的用户”,然后“禁用ID为X的用户”。
问题:关于版本控制策略,我们应该如何处理协定?
协议提到了处理版本控制的最佳实践,即语义版本控制;始终是了解用户是否更新代码/依赖项,修复,添加或破坏性内容的好方法。
但是,Pact并未丝毫强制执行此操作,这实际上取决于您要如何执行。最后,在经纪人方面,合同只是用字符串“标记”。话虽如此,您可能需要合并策略,因为这不仅影响提供商,而且影响消费者,因此需要更高程度的协作。
我希望这些回答您所有的问题。如您所见,Pact可以针对不同的用例和策略开放,因为我们了解并非每个人都以相同的方式工作,但同时,它更着重于用户以确保他们有效地协作并设置供所有人使用的标准,否则可能会变得凌乱。契约可以给您足够的绳索来垂吊自己。
干杯
M