对Dao层、Service层、Controller层进行单元测试,都需要加入如下注解:
@ContextConfiguration({"classpath*:/conf/applicationContext.xml", "classpath*:/conf/spring-mvc.xml"})
@RunWith(SpringJUnit4ClassRunner.class) //调用Spring单元测试类
注意:注解ContextConfiguration中的classpath设置配置文件要填写正确的配置文件路径,否则容易出现注入Bean错误的异常,我在测试过程中一直以为我的配置文件写得有问题,找了好久原因最后才发现配置文件路径设置错了,切记!!!!
1、对Dao层进行单元测试
@ContextConfiguration({"classpath*:/conf/applicationContext.xml", "classpath*:/conf/spring-mvc.xml"})
@RunWith(SpringJUnit4ClassRunner.class) //调用Spring单元测试类
public class InfoDaoTest {
@Autowired
private InfoMapper infoMapper;
@Test
public void test() {
Info resp = infoMapper.selectByPrimaryKey(1);
System.out.println("Dao层:返回的数据:"+resp.getName()+...);
}
}
2、对Service层进行单元测试
@ContextConfiguration({"classpath*:/conf/applicationContext.xml", "classpath*:/conf/spring-mvc.xml"})
@RunWith(SpringJUnit4ClassRunner.class) //调用Spring单元测试类
public class InfoServiceTest {
@Autowired
private InfoService infoService;
@Test
public void getDetail() {
Info request = new Info();
request.setId(1);
Info resp = infoService.getDetails(request);
System.out.println("service层:返回的数据:"+resp.getName()+...);
}
}
3、对Controller层进行单元测试
@ContextConfiguration({"classpath*:/conf/applicationContext.xml", "classpath*:/conf/spring-mvc.xml"})
@RunWith(SpringJUnit4ClassRunner.class) //调用Spring单元测试类
public class InfoControllerTest {
@Autowired
private InfoController controller;
private MockMvc mockMvc;
private String url;
@Before
public void setup(){
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void Detail() throws Exception {
url="/info/Detail";
ResultActions resultActions =
this.mockMvc.perform(MockMvcRequestBuilders.post(url).param("id", "1"));
MvcResult mvcResult = resultActions.andReturn();
String result = mvcResult.getResponse().getContentAsString();
System.out.println("Controller层:返回的数据:" + result);
}
}
@WebAppConfiguration:测试环境使用,表示测试环境使用的ApplicationContext是WebApplicationContext类型的。
@WebAppConfiguration(value = "src/main/webapp") 中value指定web应用的根;
@ContextConfiguration:指定Spring配置文件或者配置类的位置;
@RunWith(SpringJUnit4ClassRunner.class):启动Spring对测试类的支持;
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true):启用自动的事务管理,事务回滚;
@Autowired:自动织入 Spring 的 bean 用来测试;
@Before:每个方法测试前调用。一般用于public void setup() { mockMvc=MockMvcBuilders.standaloneSetup(wac).build();}前面;
@Test:测试方法,表明这是一个测试方法。在Junit中将会自动被执行。
MockMvc:在setUp(){}方法中,通过MockMvcBuilders.webAppContextSetup(wac).build()创建一个MockMvc进行测试;
mockMvc.perform():执行一个请求;
MockMvcRequestBuilders.post(url).param("param1", param1):构造一个请求,请求可传带参数;
ResultActions.andExpect():添加执行完成后的断言,ResultMatcher验证规则,验证控制器执行完成后结果是否正确;
ResultActions.andDo():添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息;
ResultActions.andReturn():表示执行完成后返回相应的结果;
Assert. :通过静态方法执行断言,判断测试结果与预期是否相同。