单元测试总结:Dao层、Service层和Controller层

对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.  :通过静态方法执行断言,判断测试结果与预期是否相同。

 

你可能感兴趣的:(java,web,java)