背景:

今天偶然想测试下每个接口是否可以访问,网上找了一堆,基本没有一个在我的环境上实现了,没有一篇文章有详细的配置,于是只能用作参考自己进行琢磨,最后就出现了这样的文章也是给各位参考了,哈哈哈。

配置:

1. springboot2

2.spring-boot-starter-test
springboot2里面的这个变成了junit5,并不是junit4,注解有些不同,具体区别参考:https://blog.csdn.net/u010675669/article/details/86574956,注释掉的代码就是去掉junit5,版本也是2.2.5

最明显的标志应该就是引用的包不同,@Test注解引用的时候不要错了。

junit5:    org.junit.jupiter.api

junit4:    org.junit.

3.数据源(两种:一种是hikari,springboot默认    一种是druid,阿里巴巴的)

3.1 hikari,pom没查到版本,只能xml看了。

3.2 druid

注意一点,一定要加上配置

不只是就会报空指针错误,下图,挺明显的。

用默认的就注释掉druid这个,要不即使你配置了hikari,最后你会发现数据源还是druid,一开始我用的druid,想切换到hikari看看效果,结果怎么都是测试通过。要不是巧合去看日记也不会知道用的是druid数据源,也就不会有这个发现了。

注意:如果不是配置文件写的,是代码里写的要区别数据源。

hikari 是 DataSourceBuilder

druid 是 DruidDataSourceBuilder

如果实在不知道用了哪个就看启动日记。应该在前面一点就能看到了,我的在11行左右

4. Controller类

网上看的资料两种注解都有@RestController或者@Controller,测试了下都可以,我以@Controller为例。

@Controller
@RequestMapping("/user")
public class UserController {.....@ResponseBody@PostMapping("/login")public Result login(@Valid Info info) {.....}
}

 5. Test类

//个别引入的包
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
//这里配置文件没找到,估计是test的自启动里面就引入了的,查看了下版本org.springframework:spring-test:5.2.4.RELEASE
import org.springframework.mock.web.MockHttpSession;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;//网上都是没有classes,但是我会报错。必须引入classes,且classes值不能乱写,要是你的springboot工程的启动类,要不没有后面MockMvc会报获取,不到请求URL的错误,即使你后台单独启动了springboot的项目。@SpringBootTest(classes={PpSystemApplication.class})//启动整个springboot工程//这个看名字就知道是自动MockMvc的了。开启后还要添加@Autowired自动注入
@AutoConfigureMockMvc
class UserControllerTest {private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);//    网上有这种形式创建MockMvc的,结果我怎么都不行,这里也写出来
//    编辑一下,用这种方法的是用junit4的。
//    @Autowired
//    private WebApplicationContext webApplicationContext;@Autowiredprivate MockMvc mvc;private MockHttpSession session;//junit5要用@BeforeEach,不是@Before@BeforeEachpublic void setupMockMvc(){//        mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
//        mvc = MockMvcBuilders.standaloneSetup(new WebController()).build();session = new MockHttpSession();}@Testvoid login() throws Exception {Info info= new Info();info.setUserName("admin");info.setPassword("admin");//请求路径不要错了MvcResult mvcResult = (MvcResult) mvc.perform(MockMvcRequestBuilders.post("/user/login").accept(MediaType.ALL).session(session)//这里要特别注意和content传参数的不同,具体看你接口接受的是哪种.param("userName",info.getUserName()).param("password",info.getPassword())//传json参数,最后传的形式是 Body = {"password":"admin","userName":"admin"}//.content(JSON.toJSON(info).toString().getBytes()) ).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();//得到返回代码int status = mvcResult.getResponse().getStatus();//得到返回结果String content = mvcResult.getResponse().getContentAsString();LOGGER.info(content);}}

配置好后,控制台可以看到的结果就是

MockHttpServletRequest:HTTP Method = POSTRequest URI = /user/loginParameters = {userName=[admin], password=[admin]}Headers = [Accept:"*/*"]Body = nullSession Attrs = {uid=1, companyId=1, roles=[RoleDO(super=BaseEntity(id=1, createTime=null, updateTime=null, remark=超级管理员 权限最高), name=超级管理员, uid=null), RoleDO(super=BaseEntity(id=2, createTime=null, updateTime=null, remark=null), name=主管, uid=null), RoleDO(super=BaseEntity(id=3, createTime=null, updateTime=null, remark=null), name=采购员, uid=null)], org.apache.shiro.subject.support.DefaultSubjectContext_AUTHENTICATED_SESSION_KEY=true, org.apache.shiro.subject.support.DefaultSubjectContext_PRINCIPALS_SESSION_KEY=admin, org.apache.shiro.web.session.HttpServletSession.HOST_SESSION_KEY=localhost, username=隔壁老王}Handler:Type = com.heyjude.controller.UserControllerMethod = com.heyjude.controller.UserController#login(LoginCheck)Async:Async started = falseAsync result = nullResolved Exception:Type = nullModelAndView:View name = nullView = nullModel = nullFlashMap:Attributes = nullMockHttpServletResponse:Status = 200Error message = nullHeaders = [Set-Cookie:"rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT", Content-Type:"application/json"]Content type = application/jsonBody = {"code":200,"message":"SUCCESS","data":null}Forwarded URL = nullRedirected URL = nullCookies = [[MockCookie@656ec00d name = 'rememberMe', value = 'deleteMe', comment = [null], domain = [null], maxAge = 0, path = '/', secure = false, version = 0, httpOnly = false]]

OK,到此为止。

springboot2+junit5+MockMvc(Mockito)实现对Controller的测试,配置都有,很详细了。相关推荐

  1. SpringBoot通过WorkBook快速实现对Excel的导入和导出(包括数据校验)

    之前转载过一篇对Excel基本操作相关的文章,这篇文章的浏览量迅速飙升,以至于在我博客的热门文章中排到了第三的位置,不过那篇转载的文章实用性差并且讲解不是很清晰,所以打算趁着今天休息,写一篇关于Spr ...

  2. java iris_利用K-Means聚类算法实现对iris.data.ulab

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用K-Means聚类算法实现对iris.data.ulabel数据的聚类,这是在网上找到如果要换成我的iris.date iris.date.ulabl ...

  3. C#代码实现对Windows凭据的管理

    今天有个任务,那就是使用C#代码实现对windows凭据管理的操作. 例如:向windows凭据管理中添加凭据.删除凭据以及查询凭据等功能. 于是乎,就开始在网上查找.经过漫长的查询路,终于在一片英文 ...

  4. 51单片机实现对24C02进行页写、顺序读取并显示验证

    源:51单片机实现对24C02进行页写.顺序读取并显示验证 //******************************************************************** ...

  5. 通过memcached来实现对tomcat集群中Session的共享策略 .

    近期在做一套集群的实现,实现的方案是在Linux下完成对Apache + Tomcat 负载均衡的功能. 但是实现了该集群后,发现登陆系统后,每次都会被拦截回登录页面,造成该现象的原因是Session ...

  6. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...

    标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...

  7. Note:HTTP服务器是如何实现对PHP支持的

    目前各种服务器HTTP Server对PHP的支持一共有三种: 通过HTTP Server内置的模块来实现,例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支 ...

  8. java实现对HDFS增删改查(CRUD)等操作

    实现对HDFS增删改查CRUD等操作 1 查找 列出某个目录下的文件名称,hdfs命令如下所示: hdfs dfs –ls/usr/app java代码片段: [plain] view plain c ...

  9. 修改html时webpack热更新,利用webpack实现对html文件的热更新

    webpack中webpack-dev-server是一个简单的web服务器,能够帮助咱们实现代码的热更新,即在实际开发中只需保存修改完后的代码,不用手动刷新页面就能够看到效果.在使用webpack- ...

最新文章

  1. 二阶系统阶跃响应实验_自控原理二阶系统阶跃响应及性能分析实验报告
  2. 利用BIOS 中断INT 0x10显示字符和字符串
  3. python免安装版_web.py入门01——python安装
  4. 终于搞定T43上的Access Connection了!
  5. GitHub上IOS开源项目
  6. noi linux,NOI Linux使用教程(基础讲解)
  7. masOS上使用Java 3D解决方案
  8. catia二次开发:人机交互select,start command
  9. Bugly使用及APP版本更新
  10. nodejs获取当前连接的网络ip
  11. 利用排序规则特点计算汉字笔划和取得拼音首字母
  12. SpringBoot打成jar包部署,Excel模板下载文件损坏,提示恢复问题处理
  13. 初学CAD,有哪些可以帮助学习的CAD快捷键?
  14. 微信小程序之个人中心静态页面
  15. mysql内存回收_mysql占用内存过多
  16. 如何使用脚本编辑器为您的Google Apps增压
  17. 云场景实践研究第50期:咕咚
  18. 使用mongodump和mongostore对mongodb数据库迁移实践总结
  19. 沙发的故事——人才的价值在于贡献度?
  20. 连接串口_交换机和工业串口服务器有哪些区别

热门文章

  1. Visual studio 2015 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
  2. [职场技巧第一期]面试前需弄明白的四个问题
  3. mybatis查询记录条数
  4. python表达式3or5的值为_表达式 3 or 5 的值为
  5. 计算机串口连接原理,串口通信的原理及USB转串口通信
  6. vue前端导出excel,js-xlsx、xlsxStyle,可设置样式、表格合并;(包含获取excel列数函数、excel合并表格缺少边框处理函数)
  7. 机器学习-查准率、查全率、调和平均值
  8. Delphi 获取菜单高度、标题栏高度、边框高度函数GetSystemMetrics
  9. nl-mean程序下载_将MEAN应用程序部署到Amazon EC2(第1部分)
  10. Unreal Engin_画廊制作笔记 _005灯光处理,平行光的设置