欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-26 17:42:36
...

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