【发布时间】:2021-03-26 07:22:12
【问题描述】:
我正在为使用 Spring Boot 的项目编写测试。它是一个简单的 REST API,具有典型的 Controller-Service-Repository 结构。
我最近阅读了很多关于如何正确编写单元测试的文章。
我读过的一篇文章是这样的:
https://medium.com/blog-quiqua/https-medium-com-blog-quiqua-unit-testing-your-api-controllers-879dbf01796f
作者陈述了我目前在项目中面临的一些问题。
在我的项目中,在“Web 层” 中,我们进行了一些安全检查(主要是验证 Bearer 令牌),然后将传入的 DTO 传递给 “服务层” 然后负责验证它并在验证失败时抛出异常。
我的问题很简单: 当 ValidationException - 带有 @ResponseStatus(BAD_REQUEST) 注释的 - 是从 “服务层” 抛出的?
我是不是想太多了,这些测试应该只是集成测试而不是单元测试?
谢谢。
编辑:
简单的答案是在调用Service方法时使用Mockito,抛出ValidationException,然后检查响应状态码。
但是还有另一个问题。如果我有一个名为 EntityDTO 的实体,它的 name 属性具有任意最大长度验证。
当超过长度时,Service 会抛出带有自定义消息的 ValidationException(即“名称属性最大长度为 X”)。
如果我的 ValidationException 是通用的(在任何验证失败时抛出),我不是在“按应有的方式”进行测试,对吗?至少这是我的感觉……
编辑 2:
将问题标记为已回答。 控制器测试不应该测试太多逻辑,所以如果我只测试就可以了:
如果请求正常
如果请求以任何方式无效,则为错误请求
如果未找到,则为 NOT FOUND
等等……
如果我需要在验证失败时测试错误消息,那么回答我的最后一个问题,那就是 Web 服务层的集成测试。
【问题讨论】:
标签: java spring spring-boot unit-testing spring-mvc