1.说明:本文采用的Springboot的开发环境。一般对Service、DAO层的Juit的测试,相对简单,仅针对controller做探讨。
2.测试@ResponseBody,针对controller只放回数据进行测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisApplicationTests {
@Autowired
private UserController userController;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(userController)
.build();
}
@Test
public void Ctest() throws Exception {
ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/user/all"));
MvcResult mvcResult = resultActions.andReturn();
//获取请求响应的数据
String result = mvcResult.getResponse().getContentAsString();
System.out.println(mvcResult.getResponse().getStatus());
}
}
3.测试MVC的类型
之前参照网上的例子,进行测试,发现出现了异常,但是诡异的是在浏览器却能正常运行,在配置文件里也设置了MVC的返回的视图地址,以及View的类型
javax.servlet.ServletException: Circular view path [add]: would dispatch back to the current handler URL [/user/add] again
查找了一些资料,分析原因是缺省转发,View name与path,Spring的转发规则,自己转给自己。
解决办法1:设置InternalResourceViewResolver,消除缺省转发所带来的问题
解决办法2:将请求的Url设置和与返回的view name不同,如上的只需将/user/add 修改成/user/save 即可解决,方法二修改起来更简单,但是需要根据项目的实际情况来选择,亲测两种方式都可用。
@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisApplicationTests {
@Autowired
private UserController userController;
private MockMvc mockMvc;
@Before
public void setUp() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".html");
mockMvc = MockMvcBuilders.standaloneSetup(userController)
.setViewResolvers(viewResolver)
.build();
}
@Test
public void Ctest() throws Exception {
ResultActions resultActions = this.mockMvc.perform(MockMvcRequestBuilders.post("/user/all"));
MvcResult mvcResult = resultActions.andReturn();
ModelAndView modelandView = mvcResult.getModelAndView();
//对比返回的视图
ModelAndViewAssert.assertViewName(modelandView,"add");
//打印返回的数据
System.out.println(modelandView.getModel());
}
}