Java 如何使用Mockito进行系统测试?我们应该吗?
我的项目包括各种使用第三方API的spring bootJava 如何使用Mockito进行系统测试?我们应该吗?,java,unit-testing,spring-boot,mockito,system-testing,Java,Unit Testing,Spring Boot,Mockito,System Testing,我的项目包括各种使用第三方API的spring boot@服务 我们已经为每一个这样的服务编写了一个模拟类,并以Spring Boot选择模拟类而不是真实类的方式运行系统测试(使用@Profile(“test”)) 其动机是: 仅测试逻辑(即使这可以通过单元测试完成) 根据经验测试系统是线程安全的 我们不能广泛使用我们的API(速率限制),但我们希望在足够多的项目上运行我们的系统 我的问题是: 对于系统测试,您会提倡这种方法吗?(所有组件都是模拟的) 如果是这样,像Mockito这样的模拟框架能
@服务
我们已经为每一个这样的服务编写了一个模拟类,并以Spring Boot选择模拟类而不是真实类的方式运行系统测试(使用@Profile(“test”)
)
其动机是:
仅测试逻辑(即使这可以通过单元测试完成)
根据经验测试系统是线程安全的
我们不能广泛使用我们的API(速率限制),但我们希望在足够多的项目上运行我们的系统
我的问题是:
对于系统测试,您会提倡这种方法吗?(所有组件都是模拟的)
如果是这样,像Mockito这样的模拟框架能做到这一点吗?Mockito的全部要点不是自己编写模拟类,而是如何在一个服务被多个bean使用的系统测试中完成它
这是一种很好的单元测试服务的方法,方法是模拟服务对外部服务的调用。您可能希望将测试分为单元
测试和集成
测试。通常,单元测试通过使用带有@Profile
(正如您所做的)的存根类或使用类似mockito的模拟库来模拟任何外部服务调用,并模拟服务的返回值
在集成测试中,这将是一个更好的系统测试,您将使用存根文件,这些存根文件通过控制器或模拟外部服务响应的模拟库(即WireMock)提供。如果您的外部API返回JSON,则可以使用控制器
或模拟库来提供实际的JSON响应。通过这样做,您正在测试您的服务是否真的进行了API调用,并处理了存根结果。您可以让服务调用控制器或WireMock URL,而不是调用实际的API URL