PACT提供商测试运行应用程序实例



当前我正在使用au.com.dius lib中的pact-jvm-consumer/provider-junit_2.11。让我的消费者协定正常工作并产生契约,但是当我尝试在提供商服务中使用这些条约时,问题就到了。

这个想法是要通过JUNIT测试来整合所有协议,以便每个人都可以在本地进行单位测试,而不必担心其他协议测试。

主要问题是:
如何处理此操作,假设正在测试的服务需要另一个服务(授权一项)和数据库作为数据馈线。我不太确信每次在本地运行这些实例,而不是杀死它们就可以解决问题。(甚至要在将这些测试部署到任何环境之前进行测试)
是否应该使用某种" hack-switch"来处理这始终返回true,作为"某些情况"的授权用户并嘲笑数据供应器?还是应该以其他方式处理?

其次(侧面问题):一旦我准备了协议,我应该如何对消费者进行测试?到目前为止,我得到了类似的东西:

assertThat(result, instanceOf(DataStructure.class)); *as an example*
上面的

是要确保我收到并将其推向消费者的数据是我期望的确切格式。是可以的,还是正确的方法是解开所有这些包装,并分别检查是否是例如地图或字符串

预先感谢!

以下是关于验证过程中固执服务的一些想法:

https://github.com/pact-foundation/pact-ruby/wiki/faq#should-the-database-or-yany-any-ony-the-part-the-part-the-provider-be-be-be-be-be-be-be

PACT作者使用PACT测试微服务的经验是,使用SET_UP挂钩填充数据库,并运行PACT:使用所有真实提供商代码验证效果很好,并完全相信我们结束方案将在部署的代码中起作用。

但是,如果您有一个大型且复杂的提供商,则可能决定将某些应用程序代码存根。您肯定需要对下游系统或设置错误方案进行呼叫。确保,如果您存根,则不会存根实际解析请求并将预期数据提取出来的代码,因为否则消费者可以发送绝对垃圾,而契约:验证不会失败,因为代码won won被执行。如果您在数据源中插入记录时会发生验证,则不会使任何内容插入任何内容,或者重新考虑您的验证代码。

我个人会存放身份验证服务(假设您已经有其他测试来证明您正在正确调用身份验证服务),但是我通常使用真实的数据库,除非这会使使用模拟的事物变得复杂便宜(及时,努力,可维护性)。

关于您的第二个问题,我不确定您在说什么,但我认为您正在谈论对对象的属性的断言,这些属性已被模拟的回答(在消费者测试)。我将进行一个检查每个属性的测试,以确保我在Unmarshalling代码中使用了正确的属性名称。但是正如我所说,我只会这样做一次(或多次需要确保我一次检查了所有属性名称)。在其余的测试中,我只是断言返回了正确的对象类。

最新更新