繁体   English   中英

Pact提供程序测试正在运行的应用程序实例

[英]Pact provider test running app instances

目前,我正在使用au.com.dius lib pact-jvm-consumer/provider-junit_2.11 我的消费者契约可以正常工作并生成契约,但是当我尝试在提供者服务中使用这些契约时就会出现问题。
这个想法是将所有协议与junit测试集成在一起,这样每个人都可以在本地运行其单元测试,而不必担心附加的协议测试。

主要问题是:
假设被测服务需要另一项服务(授权一项)和一个数据库作为数据馈送器,则如何处理此问题。 我不太相信每次在本地运行这些实例并比杀死它们更有效。 (想要在将测试部署到任何环境之前进行测试)
是否应该使用某种“ hack-switch”来处理此问题,以便在“某些情况”下始终以授权用户的身份返回true,并模拟数据馈送器? 还是应该以其他方式处理?

其次(附带问题):一旦我准备好协定,我应该如何针对消费者测试这些协定? 到目前为止,我得到了类似的信息:(这很好,但是我也不确定这些)

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

上面是为了确保我收到并推送给消费者的数据与我期望的格式相同。 可以吗,或者正确的方法是解压缩所有这些文件并分别检查它们是否为Maps或Strings

提前致谢!

这是有关验证过程中存根服务的一些想法:

https://github.com/pact-foundation/pact-ruby/wiki/FAQ#should-the-database-or-any-other-part-of-the-provider-be-stubbed

Pact作者使用pact测试微服务的经验是,使用set_up钩子填充数据库,并使用所有真实的提供程序代码运行pact:verify效果很好,并且使我们完全相信端到端场景将在部署的代码中工作。

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

我个人将对身份验证服务进行存根(假设您已经进行了其他测试以表明您在正确地调用身份验证服务),但是我通常使用真实数据库,除非这会使事情变得复杂,例如使用模拟是“便宜的”(在时间,精力,可维护性)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM