【问题标题】:How to test a microservice by mocking the dependencies?如何通过模拟依赖项来测试微服务?
【发布时间】:2016-02-02 06:43:16
【问题描述】:

我有一个用 Grails 编写的 RESTFul 微服务。这个微服务有它自己的数据库。它还依赖于另外两个微服务。

服务的典型工作流程是:

  1. 接收来自客户端的 GET 请求,例如浏览器
  2. 调用另一个微服务 throw http 来获取一些信息
  3. 查询自己的数据库以获取一些数据
  4. 向客户端发送响应

我想为此服务编写自动化测试。每当我运行测试时,它都会执行以下操作:

  • 模拟外部微服务
  • 创建一个数据库并用测试数据填充它
  • 运行应用程序并将其配置为使用模拟服务和数据库
  • 通过发送 http 请求和匹配响应来运行测试用例

这是我的问题:

  • 这是什么类型的测试?
  • 有哪些好的框架或工具可以编写此类测试?

我对测试知之甚少,所以我可能会问一些愚蠢的问题。

【问题讨论】:

  • 似乎是单元测试和集成测试的混合体。在单元测试中,被测试方法之外的所有东西都应该被控制/模拟(微服务和数据库)。至于工具/框架,我倾向于结合使用 Spock 规范和 Groovy 工具(模拟和元类)
  • 作为起点,您是否检查过有关文档测试的章节? grails.github.io/grails-doc/latest/guide/testing.html

标签: unit-testing grails testing automated-tests


【解决方案1】:

我的第一个建议是您的服务不知道 HTTP 请求。它应该是更高级别层的提供者,例如https://jersey.java.net,它可以发出请求并将您的服务类返回的 POJO 映射为 JSON 或任何要在 HTTP 响应中返回的内容。

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

需要涵盖的一些情况: 如果其他微服务可以返回 A、B 或 C,而 DB 可以返回 D、E 或 F,那么您有 9 个场景需要测试。使用模拟来提供所有这些种类的数据,然后对结果进行断言。如果还有更多可能性,请考虑添加额外的信息收集方法并自行测试。

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 2019-12-08
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    相关资源
    最近更新 更多