如何通过模拟依赖项来测试微服务?

4
我有一个用Grails编写的RESTful微服务。这个微服务有自己的数据库,并且依赖于另外两个微服务。
该服务的典型工作流程如下:
1. 接收来自客户端(例如浏览器)的GET请求。 2. 通过http调用另一个微服务以获取一些信息。 3. 查询自己的数据库以获取一些数据。 4. 向客户端发送响应。
我想为这个服务编写自动化测试。每当我运行测试时,它将执行以下操作:
1. 模拟外部微服务。 2. 创建一个数据库并填充测试数据。 3. 运行应用程序并配置其使用模拟服务和数据库。 4. 发送http请求并匹配响应来运行测试用例。
以下是我的问题:
1. 这是什么类型的测试? 2. 有哪些好的框架或工具可以编写这种类型的测试?
我对测试了解得很少,所以可能会问一些愚蠢的问题。

1
似乎是单元测试和集成测试的混合体。在单元测试中,被测试方法之外的一切都应该受到控制/模拟(微服务和数据库)。至于工具/框架,我倾向于使用Spock规范和Groovy工具(mockFor和metaClassing)的组合。 - railsdog
作为起点,您是否已经查看了文档中有关测试的章节?http://grails.github.io/grails-doc/latest/guide/testing.html - ascu
1个回答

0

我的第一个建议是,您的服务不应该知道HTTP请求。它应该是一个提供者,提供给像https://jersey.java.net这样的更高级别层,可以发出请求并将您的服务类返回的POJO映射为JSON或其他格式以返回HTTP响应。

您在#4中的方法,“向客户端发送响应”应使用这些外部依赖项收集信息,然后做出决策。

一些要考虑的情况: 如果其他微服务可以返回A、B或C,而数据库可以返回D、E或F,则有9种场景需要测试。使用模拟数据提供所有这些数据的变化,并对结果进行断言。如果可能性更多,则考虑添加额外的信息收集方法,并单独测试它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接