【kotlin】Spring boot controller 如何做单元测试???
如果你需要测试的控制器有forward,请看看这里,了解如何测试
使用集成web环境进行测试,请使用如下方法创建MockMvc
@Autowired private lateinit var indexViewAction: indexViewAction
private lateinit var mockMvc: MockMvc
@Before
fun before(){
mockMvc = MockMvcBuilders
.standaloneSetup(indexViewAction)
.build()
}
注入你需要的controller,然后将其放入standaloneSetup
这种是使用独立测试方法进行
首先,我们先准备一个要做单元测试的类,更详细的在post和get的带方法测试上,可以直接翻到最后
@RunWith(SpringRunner::class)
/@SpringBootTest(classes = [Application::class]) 需要配外的配置/
@SpringBootTest /* 不需要格外的配置 */
class IndexViewTest {
private lateinit var mockMvc: MockMvc
@Autowired
private lateinit var webApplicationContext: WebApplicationContext
@Before
fun init(){
/*创建一个mock mvc*/
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.build()
}
}
想必大家看到了MockMvcBuilders,这个类是用来帮助我们创建一个MockMvc的,name什么是MockMvc了
// 这个是MockMvc的文档描述,提供spring mvc的测试支持
/**
- Main entry point for server-side Spring MVC test support.
-
Example
- import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
- import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
- import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*;
- // …
- WebApplicationContext wac = …;
- MockMvc mockMvc = webAppContextSetup(wac).build();
- mockMvc.perform(get("/form"))
- .andExpect(status().isOk())
- .andExpect(content().mimeType(“text/html”))
- .andExpect(forwardedUrl("/WEB-INF/layouts/main.jsp"));
- @author Rossen Stoyanchev
- @author Rob Winch
- @author Sam Brannen
- @since 3.2
*/
现在我们可以开始测试了,先来简单的测试一个get post方法
@RunWith(SpringRunner::class)
/@SpringBootTest(classes = [Application::class]) 需要配外的配置/
@SpringBootTest /* 不需要格外的配置 */
class IndexViewTest {
private lateinit var mockMvc: MockMvc
@Autowired
private lateinit var webApplicationContext: WebApplicationContext
@Before
fun init(){
/*创建一个mock mvc*/
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.build()
}
/*使用get测试*/
@Test
fun get(){
mockMvc
.get("/index.html") /*指定get方法要使用的url地址*/
.andReturn() /*返回结果*/
.response /*返回内容*/
.contentAsString /*内容作为html形式*/
.apply(::println) /*打印结果*/
}
/*使用post测试*/
@Test
fun post(){
mockMvc
.post("/index.html") /*指定get方法要使用的url地址*/
.andReturn() /*返回结果*/
.response /*返回内容*/
.contentAsString /*内容作为html形式*/
.apply(::println) /*打印结果*/
}
}
但是很多时候,我们的测试哪里有这么简单,一般都是带参数的,那么带参数要如何测试呢
重点,这个才是重点
@RunWith(SpringRunner::class)
/@SpringBootTest(classes = [Application::class]) 需要配外的配置/
@SpringBootTest /* 不需要格外的配置 */
class IndexViewTest {
private lateinit var mockMvc: MockMvc
@Autowired
private lateinit var webApplicationContext: WebApplicationContext
@Before
fun init(){
/*创建一个mock mvc*/
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.build()
}
/*使用get测试*/
@Test
fun get(){
mockMvc
.get("/index.html") /*指定get方法要使用的url地址*/
.andReturn() /*返回结果*/
.response /*返回内容*/
.contentAsString /*内容作为html形式*/
.apply(::println) /*打印结果*/
}
/*使用post测试*/
@Test
fun post(){
mockMvc
.post("/index.html") /*指定get方法要使用的url地址*/
.andReturn() /*返回结果*/
.response /*返回内容*/
.contentAsString /*内容作为html形式*/
.apply(::println) /*打印结果*/
}
/*带参数的get测试*/
@Test
fun getAndParam(){
mockMvc
.perform(
MockMvcRequestBuilders.get("/index.html")/*设置url地址*/
.param("page","1")/*设置参数*/
.cookie(Cookie("name","lemon"))/*设置cookie*/
.header("username","lemon")/*设置请求头*/
/*当然还可以设置很多东西,按.就可以看到了*/
)
.andExpect ( /*设置成功条件*/
matchAll( /* 这是一个静态方法,它的返回值刚好就是andExpect需要的参数*/
status().isOk, /*这是静态方法,判断返回类型*/
header().exists("Content-Type"), /*这也是静态方法,判断头里面是不是有指定的头,只包含你自己添加的头,不包括默认头(也就是哪些不是你设置的头)*/
content().encoding("utf-8") /*判断返回的编码*/
)
)
.andReturn() /*返回结果*/
.response /*返回内容*/
.contentAsString /*内容作为html形式*/
.apply(::println) /*打印结果*/
}
/*带参数的post测试*/
@Test
fun postAndParam(){
mockMvc
.perform(
MockMvcRequestBuilders.post("/index.html")/*设置url地址*/
.param("page","1")/*设置参数*/
.cookie(Cookie("name","lemon"))/*设置cookie*/
.header("username","lemon")/*设置请求头*/
/*当然还可以设置很多东西,按.就可以看到了*/
)
.andExpect ( /*设置成功条件*/
matchAll( /* 这是一个静态方法,它的返回值刚好就是andExpect需要的参数*/
status().isOk, /*这是静态方法,判断返回类型*/
header().exists("Content-Type"), /*这也是静态方法,判断头里面是不是有指定的头,只包含你自己添加的头,不包括默认头(也就是哪些不是你设置的头)*/
content().encoding("utf-8") /*判断返回的编码*/
)
)
.andReturn() /*返回结果*/
.response /*返回内容*/
.contentAsString /*内容作为html形式*/
.apply(::println) /*打印结果*/
}
}
注意注意,如果你要是报错了之后再来看 的话,更加要注意
import org.springframework.test.web.servlet.ResultMatcher.matchAll
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.*
这些东西一定要引入
感谢:小站
上一篇: 基于JavaScript实现瀑布流效果
下一篇: 如何编写jquery插件
推荐阅读
-
详解Spring Boot Junit单元测试
-
详解Spring Boot实战之单元测试
-
idea创建一个入门Spring Boot项目(controller层)使用Moven代码管理
-
Spring Boot通过Junit实现单元测试过程解析
-
Spring Boot与Kotlin定时任务的示例(Scheduling Tasks)
-
spring boot的应用程序单元测试方案
-
spring boot的应用程序单元测试方案
-
rpc框架dubbo学习入门及环境搭建(spring boot+Kotlin)
-
Spring Boot从Controller层进行单元测试的实现
-
使用Spring boot + jQuery上传文件(kotlin)功能实例详解