Spring boot springbootapi的单元测试
我正在开发一个SpringBootWebAPI,目前正在编写所需的单元测试Spring boot springbootapi的单元测试,spring-boot,junit,mockito,spring-boot-test,Spring Boot,Junit,Mockito,Spring Boot Test,我正在开发一个SpringBootWebAPI,目前正在编写所需的单元测试 我想知道:为控制器编写单元测试(JUnit+Mockito)是否足够?由于控制器是我的应用程序的入口点,并且服务端中实现的所有逻辑都是从公开的API调用的,为什么我需要为服务端编写测试?首先,如果您编写测试以涵盖“所需的测试级别”或“有一些测试”的要求既然已经完成了生产实现,就有点太晚了。在大多数情况下,根据您的需求、合同、用例或任何更为优化的方法,首先进行测试。尽管如此,我不知道你的情况和你正试图实施的事情,所以把它当
我想知道:为控制器编写单元测试(JUnit+Mockito)是否足够?由于控制器是我的应用程序的入口点,并且服务端中实现的所有逻辑都是从公开的API调用的,为什么我需要为服务端编写测试?首先,如果您编写测试以涵盖“所需的测试级别”或“有一些测试”的要求既然已经完成了生产实现,就有点太晚了。在大多数情况下,根据您的需求、合同、用例或任何更为优化的方法,首先进行测试。尽管如此,我不知道你的情况和你正试图实施的事情,所以把它当作一个建议,继续讨论你正在询问的关键问题 JUnit(最好是5)和Mockito测试,它们可能使用
MockMvc
是非常好的单元(-like)测试,可以涵盖web通信方面的问题,例如:HTTP请求类型、内容类型、编码、输入和输出参数JSON(反)序列化、错误处理等。最好在模拟服务层的情况下进行测试。正因为如此,您可以轻松地覆盖大量web案例,而无需准备数据库中的数据等
核心逻辑也必须进行测试。根据它是什么,以单元的方式测试它可能是可行的(最容易编写,可以覆盖很多情况,也包括一些特殊情况)。可以用一组集成测试来补充它,以验证它在集成(SpringBeans、DB等)中也能正常工作
如果需要,您也可以通过控制器、服务到数据库/数据存储(如果有)的(真实)HTTP请求从web调用编写一些E2E测试,但我将仅限于在CI/CD管道中使用它来验证部署是否成功完成的最重要场景
免责声明。我发现这种方法在多种情况下都很有用,但在某些其他情况下,最好改变平衡点,以便更好地应用测试。我认为您可能会混淆单元测试和集成测试 如果您使用的是Mockito,那么您可能指的是单元测试,其中,测试类的作用域应该仅为当前类 任何外部方法调用都应该被模拟。因此,在您的情况下,服务调用应该被模拟,以防您为控制器类编写单元测试 您的测试套件应该包含
- Junit for Controller——测试接口契约点,如HTTP方法、请求参数、强制输入、有效请求有效负载
- Junit适用于所有其他类,包括服务类——这是为了测试应用程序类的核心逻辑
- 集成测试最后一个集成测试,它可以使用服务类和其他应用程序代码功能攻击控制器端点