首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot API的单元测试

Spring Boot API的单元测试
EN

Stack Overflow用户
提问于 2020-04-25 00:47:59
回答 2查看 246关注 0票数 1

我正在开发一个Spring Boot Web API,目前正在编写所需的单元测试。

我想知道:为控制器编写单元测试(JUnit + Mockito)还不够吗?既然控制器是我的应用程序的入口点,并且在服务端实现的所有逻辑都是从公开的API调用的,那么为什么我需要为服务端编写测试呢?

EN

回答 2

Stack Overflow用户

发布于 2020-04-25 04:00:49

首先,如果您编写的测试涵盖了已经完成生产实现的“所需的测试级别”或“有一些测试”的需求,那么就有点晚了。在大多数情况下,首先进行测试,基于您的需求,合同,用例或任何它更优化的方法。尽管如此,我不知道你的情况和你试图实现的事情,所以把它当作一个建议,然后继续你所询问的关键事情。

您的JUnit (最好是5)和Mockito测试(可能使用MockMvc )是非常好的单元(-like)测试,可以涵盖web通信问题,例如: HTTP请求类型、内容类型、编码、输入和输出参数JSON (反)序列化、错误处理等。它们最好使用模拟的服务层进行测试。多亏了这一点,你可以轻松地涵盖许多web案例,而不需要在数据库中准备数据,等等。

核心逻辑也必须进行测试。取决于它是什么,以单元方式测试它可能是可行的(最容易编写,可以涵盖许多-也包括角落-案例)。可以用一些集成测试来补充它,以验证它在集成(Spring Bean、DB等)中也工作得很好。

如果需要,您还可以从web调用编写一些E2E测试,通过控制器、服务到数据库/数据存储(如果有)的(真正的) HTTP请求,但我会将其限制在最重要的场景中,以便在CI/CD管道中使用它来验证部署是否成功完成。

免责声明。我发现这种方法在多种情况下都很有用,但在其他一些情况下,改变平衡点以更好地应用测试可能是很好的。

票数 2
EN

Stack Overflow用户

发布于 2020-04-25 14:31:01

我想你可能把单元测试和集成测试搞混了。

如果你使用的是Mockito,你可能指的是单元测试,其中Test class的作用域应该只是当前类。

任何外部方法调用都应该是mocked.So的,在您的情况下,服务调用应该是模拟的,以便为您的控制器类编写单元测试。

你的测试套件应该包含

控制器测试的

  • Junit --测试接口契约点,如HTTP方法、请求参数、强制输入、所有其他类的有效请求Payloads.
  • Junit,包括服务类-这是为了测试您的应用程序类核心测试-最后是一个集成测试,它可以用服务类和其余的应用程序代码Payloads.
  • Junit来攻击您的控制器端点
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61413347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档