java测试web层当验证发生在服务层spring引导测试中

ohfgkhjo  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(333)

我正在为使用springboot的项目编写测试。它是一个简单的RESTAPI,具有典型的控制器服务存储库结构。
我最近读了很多关于如何正确编写单元测试的书。
我读过的一篇文章是:
https://medium.com/blog-quiqua/https-medium-com-blog-quiqua-unit-testing-your-api-controllers-879dbf01796f
作者陈述了我目前在项目中面临的一些问题。
在我的项目中,在“web层”中,我们进行一些安全检查(主要验证承载令牌),然后将传入的dto传递给“服务层”,服务层负责验证,如果验证失败,则抛出异常。
我的问题很简单:当validationexception(用@responsestatus(badïrequest)注解)从“服务层”抛出时,我将如何为我的“web层”编写单元测试,比如一个坏请求?
我是不是想得太多了,这些测试应该只是集成测试而不是单元测试?
谢谢。
编辑:
简单的答案是在调用服务方法时使用mockito并抛出validationexception,然后检查响应状态代码。
但还有一个问题。如果我有一个名为entitydto的实体,它的name属性具有任意的最大长度验证。
当超过长度时,服务抛出一个带有自定义消息的validationexception(即“name property max.length is x”)。
如果我的validationexception是泛型的(当任何验证失败时抛出),那么我不是在测试“它应该是的”,对吗?至少这是我的感觉。。。
编辑2:
将问题标记为已回答。控制器测试不应该测试太多的逻辑,所以如果我只测试:
如果请求正常
如果请求在任何类型的方式中都无效,那么就是坏请求
如果未找到,则未找到
等。。。
如果我需要在验证失败时测试错误消息,那么这是对web服务层的集成测试。

jogvjijk

jogvjijk1#

将服务作为bean注入(例如将其标记为组件),并在测试中模拟它。然后让mock发出validationexception并在控制器上Assert以返回状态代码400。我不能告诉你怎么做,而不知道你的控制器看起来像什么,因为有几种方法来处理的React。

相关问题