如果你需要测试的控制器有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的测试支持
/**
@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.*
这些东西一定要引入
spring boot的接口测试进一步说明
感谢:更多内容