如果有一个Spring MVC项目,那么我们的测试一般有两种,一种是单元测试,第二种是端对端测试。
单元测试可以选用Spring MVC Test框架,当然也可以当作一般的单元测试不使用SpringJUnit4ClassRunner来运行。
而端对端测试一般是起一个服务,然后使用测试框架启动一个浏览器来测试。这两者相互结合倒也融洽。
整个Spring项目最近多了一个新的项目,提供了一种介于其中的测试支持。
Spring Test Htmlunit
这个项目是Spring原有测试框架和HtmlUnit的一个结合。
主要在于解决以下三个问题:
- 集成常见的测试工具同时不启动服务器(当作单元测试对待)
- 支持Javascript
- 可以Mock一些组件来加快测试
先来看看原有的单元测试框架是如何测试的
MockHttpServletRequestBuilder retrieveProfile = post("/profile/")
.param("userid","1"));
mockMvc.perform(retrieveProfile)
.andExpect(status().isOk());
当然测试中还可以去测试Model。如果需要测试页面渲染,就需要借助xpath了。
mockMvc.perform(get("/profile/create"))
.andExpect(xpath("//input[@name='name']").exists())
.andExpect(xpath("//textarea[@name='introduction']").exists());
但是页面的交互是很负责,所以更多部分的测试是在端对端中。
示例
来看看新的工具是怎样解决问题的。
首先创建一个WebClient
WebClient webClient;
@Before
publicvoidsetup() {
webClient = MockMvcWebClientBuilder
.webAppContextSetup(context









