测试前关闭web项目。springboot启动程序WebApplication.class

  1. 笔者本地自定了端口SpringBootTest.WebEnvironment.DEFINED_PORT

代码如下:

  1. import com.xxx.web.WebApplication;
  2. import org.junit.Before;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.http.MediaType;
  9. import org.springframework.mock.web.MockHttpSession;
  10. import org.springframework.test.context.junit4.SpringRunner;
  11. import org.springframework.test.web.servlet.MockMvc;
  12. import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
  13. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
  14. import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
  15. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  16. import org.springframework.web.context.WebApplicationContext;
  17.  
  18. import java.time.Instant;
  19. import java.util.Random;
  20.  
  21. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
  22. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
  23. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
  24.  
  25. @RunWith(SpringRunner.class)
  26. @SpringBootTest(classes = WebApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
  27. @AutoConfigureMockMvc
  28. public class TestAppController {
  29.  
  30. @Autowired
  31. private WebApplicationContext context;
  32.  
  33. @Autowired
  34. private MockMvc mvc;
  35.  
  36. private MockHttpSession session;// 1.定义一个变量保存session
  37.  
  38. String pathOnClasspath;
  39.  
  40. @Before
  41. public void setUp() throws Exception {
  42. mvc = MockMvcBuilders.webAppContextSetup(context).build();
  43. session = new MockHttpSession(); //2.初始化
  44. }
  45.  
  46. @Test
  47. public void login() throws Exception {
  48. // 登陆
  49. MockHttpServletRequestBuilder loginRequestBuilder = MockMvcRequestBuilders.post("/user2/login")
  50. .param("loginName", "test")
  51. .param("password", "567")
  52. .contentType(MediaType.APPLICATION_JSON_UTF8)
  53. .accept(MediaType.APPLICATION_JSON)
  54. .session(session);//3.当某个请求需要session时,直接在构造器中绑定需要的session
  55. mvc.perform(loginRequestBuilder).andDo(MockMvcResultHandlers.print());
  56.  
  57. }
  58.  
  59. @Test
  60. public void save() throws Exception {
  61.  
  62. //先登录
  63. login();
  64.  
  65. mvc.perform(post("/app/save")
  66. .param("name","测试")
  67. .param("categoryId","567")
  68. .param("description","休闲益智类游戏语音识别测试")
  69. .session(session)
  70. .contentType(MediaType.APPLICATION_JSON))
  71. .andExpect(status().isOk())
  72. //.andExpect(jsonPath("$",hasSize(1)))
  73. //.andExpect(jsonPath("$.message").value(is("保存成功")))
  74. //.andExpect(jsonPath("$.message"),is("保存成功"))
  75. .andDo(MockMvcResultHandlers.print());
  76. }
  77.  
  78. @Test
  79. public void update() throws Exception{
  80. Random rnd = new Random();
  81. int id = rnd.nextInt(6);
  82. mvc.perform(
  83. post("/app/update")
  84. .param("id", String.valueOf(id))
  85. .param("name", String.format("测试%s", Instant.now().toEpochMilli()))
  86. .param("description", "描述12121")
  87. ).andDo(MockMvcResultHandlers.print());
  88. }
  89.  
  90. @Test
  91. public void list() throws Exception {
  92. mvc.perform(get("/app/list")
  93. .contentType(MediaType.TEXT_HTML))
  94. .andExpect(status().isOk())
  95. .andDo(MockMvcResultHandlers.print());
  96. }
  97.  
  98. @Test
  99. public void filteredList() throws Exception {
  100. mvc.perform(post("/app/list")
  101. .param("keyword","111")
  102. .contentType(MediaType.TEXT_HTML))
  103. .andExpect(status().isOk())
  104. .andDo(MockMvcResultHandlers.print());
  105. }
  106.  
  107. @Test
  108. public void testisDuplicatedName() throws Exception
  109. {
  110. mvc.perform(post("/app/isDuplicatedName")
  111. .param("name","测试")
  112. ).andDo(MockMvcResultHandlers.print());
  113. }
  114.  
  115. }

测试输出效果

其他参考:

https://www.petrikainulainen.net/programming/spring-framework/integration-testing-of-spring-mvc-applications-write-clean-assertions-with-jsonpath/

使用MockMvc进行springboot调试(SpringbootTest)的更多相关文章

  1. SpringBoot基础之MockMvc单元测试

    SpringBoot创建的Maven项目中,会默认添加spring-boot-starter-test依赖.在<5分钟快速上手SpringBoot>中编写的单元测试使用了MockMvc.本 ...

  2. SpringBoot配置文件(1)

    配置文件 1.配置文件 SpringBoot使用一个全局的配置文件 application.properties application.yml 配置文件名是固定的: 他的作用是修改SpringBoo ...

  3. SpringBoot详解

    1.Hello,World! 1.1.SpringBoot简介 回顾什么是Spring Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson . ...

  4. SpringBoot Maven项目 Helloworld 测试

    SpringBoot 化繁为简,简化配置 SpringBoot官方:http://projects.spring.io/spring-boot/SpringBoot使用介绍:http://blog.c ...

  5. [02-01]Java学习路线(完整详细版)

    Java基础课程 Java基础课程内容涉及:Java开发介绍.Java数组.Java面向对象.常用基础类.集合.IO流.多线程.异常.网络.反射. 第一阶段:Java基础 1 第一部分:Java开发介 ...

  6. SpringBoot------MockMvc单元测试

    1.添加测试依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...

  7. 单元测试 - SpringBoot2+Mockito实战

    单元测试 - SpringBoot2+Mockito实战 在真实的开发中,我们通常是使用SpringBoot的,目前SpringBoot是v2.4.x的版本(SpringBoot 2.2.2.RELE ...

  8. SpringBoot------单元测试

    1.添加测试依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  9. 分布式任务调度平台XXL-JOB学习笔记一

    分布式任务调度平台XXL-JOB学习笔记一 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用.码云地址 ...

随机推荐

  1. xcode 查看stastic

    点GPU 双击柱状图 从上面list里点performance

  2. 数据库概念 MySQL语法

    数据库概念 将保存的数据部分,存到一个公共的地方,所有的用户涉及到数据相关都必须来这个公共地方查找 MySQL 本质就是一款基于网络通信的应用软件,任何基于网络通信的软件底层都是socket 可以把M ...

  3. 我们什么时候应该在C程序中使用指针?

    回答: 传递大型结构喜欢服务器请求或响应数据包. 实现链表和二叉树. 使用GPIO或硬件寄存器. 从函数中获取地址或更新值(通过引用调用) 创建动态数组. 使用函数指针创建回调函数. 注意:除此之外, ...

  4. 2019牛客暑期多校训练营(第十场)Han Xin and His Troops——扩展中国剩余定理

    题意 求解 $n$ 个模方程 $x \equiv a (mod \ b)$,不保证模数互素($1 \leq n \leq 100$,$0 \leq b < a< 10^5$). 分析 套扩 ...

  5. HDU-1028-Ignatius and the Princess III(母函数)

    链接: https://vjudge.net/problem/HDU-1028 题意: "Well, it seems the first problem is too easy. I wi ...

  6. Java处理小数点后几位

    //方式一: //四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); , BigDecimal.ROUND_HALF_UP). ...

  7. Python3 报错'latin-1' codec can't encode character 解决方案

    Python3 报错'latin-1' codec can't encode character 解决方案 在更新数据库操作时,报错: UnicodeEncodeError: 'latin-1' co ...

  8. [笔记] 三元环 && 四元环计数

    Thanks to i207M && iki9! 三元环计数 无向图的三元环计数 我们首先需要对无向边按一定规则定向: 设 \(in[u]\) 表示 \(u\) 的度数 若 \(in[ ...

  9. E:nth-of-type(n)

    E:nth-of-type(n) 语法: E:nth-of-type(n) { sRules } 说明: 匹配同类型中的第n个同级兄弟元素E.深圳dd马达 要使该属性生效,E元素必须是某个元素的子元素 ...

  10. MongoDB 分片管理(三)服务器管理

    MongoDB 分片管理(三)服务器管理