假设我们有一个CreditCardService微服务,它依赖于使用JSON进行通信的ThreeDSecureService微服务。微服务合同的自动化测试?
ThreeDSecureService的API(或甚至实施)的微小变化可能会悄悄地破坏CreditCardService(和其他潜在客户端)。所以,我们希望自动化测试。
我看到两个有缺陷的方法,并且想知道如何改进。
- 在ThreeDSecureService.Tests中进行集成测试。
随附的ThreeDSecureService测试项目可以通过固定的JSON输入进行集成测试。伪装任何依赖关系,它可以运行一个完全的输入调用,确认服务吞下输入。
这里的问题是,如果有人未能意识到他们的变化会如何破坏客户端,他们几乎可以“修复”测试来匹配他们的变化。
- CreditCardService.Tests中的集成测试。
客户端是实际上想要测试有关ThreeDSecureService预期输入的断言的人。但是,这需要客户端解决方案包含ThreeDSecureService项目以及它所依赖的任何项目。这会否定我们从使用微服务中获得的许多优势!
我们如何在不破坏我们从使用微服务中获得的松散耦合的情况下从客户端断言(维护依赖关系)?
难道你不能简单地让你的集成测试项目了解它们吗(通过引用或以某种方式启动它们)?这两个服务不需要彼此了解,但是我认为在引用它们的测试项目中没有任何伤害。 – kkirk
在此阅读我的答案:https://stackoverflow.com/a/45177810/569662。 OP有关于如何管理服务依赖关系的类似问题。 –
@kkirk但是,当您在处理客户端项目时,您需要运行常规测试。因此,您需要将集成测试项目包含在客户端解决方案中,否?如果我们可以引用依赖关系的DLL *,那就好了......但是我们如何保持最新的,即最新的和构建的? – Timo