如何使用Mockito进行系统测试?我们应该吗?

时间:2019-04-07 12:52:17

标签: java unit-testing spring-boot mockito system-testing

我的项目包括各种使用第三方API的spring boot @Service

我们为每种此类服务编写了一个模拟类,并以这样的方式运行系统测试:Spring Boot选择模拟类而不是真实类(使用@Profile("test"))。

这样做的动机是:

  1. 仅测试逻辑(即使可以通过单元测试完成)
  2. 凭经验测试系统是否是线程安全的
  3. 我们不能广泛使用我们的API(速率限制),但是我们希望在足够多的项目上运行我们的系统。

我的问题:

  1. 您会倡导这种方法进行系统测试吗? (所有组件都被模拟)
  2. 如果是这样,像Mockito这样的模拟框架可以做到吗? Mockito的全部要点是不是自己编写模拟类,但是如何为多个bean使用服务的系统测试完成它呢?

1 个答案:

答案 0 :(得分:1)

通过模拟外部服务对服务的调用,这是对单元服务进行单元测试的好方法。您可能需要将测试分为unit测试和integration测试。通常,单元测试通过将存根类与@Profile一起使用来模拟任何外部服务调用(如您所完成的那样),或者通过使用诸如mockito之类的模拟库来模拟服务的返回值。

在一个集成测试中,这将是一个更好的系统测试,您将使用通过Controller或模拟库(即WireMock)提供服务的存根文件,该库“嘲笑”外部服务的响应。如果您的外部API返回JSON,则可以有一个Controller或模拟库来提供实际的JSON响应。通过这样做,您正在测试您的服务是否实际进行了API调用,并且对存根结果进行了处理。您不必让服务调用实际的API URL,而是让它调用您的控制器或WireMock URL。

相关问题