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

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

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

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

这样做的动机是:

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

我的问题:

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

最佳答案

这是通过模拟对外部服务的调用来对服务进行单元测试的好方法。您可能希望将测试分为单元测试和集成测试。通常,单元测试通过使用带有 @Profile 的 stub 类(如您所做的那样)或使用像 mockito 这样的模拟库来模拟任何外部服务调用,并模拟服务的返回值。 p>

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

关于java - 如何使用Mockito进行系统测试?我们应该吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55559207/

相关文章:

spring - 为什么 AuthenticationManager 会抛出 StackOverflowError?

java - 如何在获得许可后重新加载 Activity

java - java中如何停止while循环?

ios - 测试目标下未调用 MagicalRecord 完成 block

java - 如何使用 JUnit 测试这个类?

c# - 模拟 while 循环

java - 操作数组上的字符串

java - Grails 上的 OAuth 2 和 Scribe

java - Spring Boot + Apache 磁贴

spring-boot - 如何禁用 TomcatServletWebServerFactory 的 SpringBoot 自动配置以便自定义 spring-starter 提供它?