单元测试最佳实战项目代码下载

1、单元测试框架对比了junit和TestNG的使用,推荐使用testNG

2、在mock层框架使用了easymock和powermock,推荐使用powermock,powermock可以访问私有的静态变量等

3、对于dao层数据库使用dbutil工具框架来导入模拟的测试数据

 

/*
Navicat MySQL Data Transfer

Source Server         : 本地电脑2
Source Server Version : 50527
Source Host           : localhost:3306
Source Database       : test_junit

Target Server Type    : MYSQL
Target Server Version : 50527
File Encoding         : 65001

Date: 2018-06-25 10:13:14
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `t_user`
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(111) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `nickname` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('1', 'admin343443', '123', '超级管理员');

 

4、对于springmvc控制层的单元测试推荐使用MockMvc框架

package com.atguigu.crud.test;

import java.util.List;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import com.atguigu.crud.bean.Employee;
import com.github.pagehelper.PageInfo;

/**
 * 使用Spring测试模块提供的测试请求功能,测试curd请求的正确性
 * Spring4测试的时候,需要servlet3.0的支持
 * @author lfy
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:applicationContext.xml",
        "classpath:dispatcher-servlet.xml" })
public class MvcTest {
    // 传入Springmvc的ioc
    @Autowired
    WebApplicationContext context;
    // 虚拟mvc请求,获取到处理结果。
    MockMvc mockMvc;

    @Before
    public void initMokcMvc() {
        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @Test
    public void testPage() throws Exception {
        //模拟请求拿到返回值
        MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emps").param("pn", "5"))
                .andReturn();

        //请求成功以后,请求域中会有pageInfo;我们可以取出pageInfo进行验证
        MockHttpServletRequest request = result.getRequest();
        Assert.assertNotNull(request);
        PageInfo pi = (PageInfo) request.getAttribute("aa");
        System.out.println("当前页码:"+pi.getPageNum());
        System.out.println("总页码:"+pi.getPages());
        System.out.println("总记录数:"+pi.getTotal());
        System.out.println("在页面需要连续显示的页码");
        int[] nums = pi.getNavigatepageNums();
        for (int i : nums) {
            System.out.print(" "+i);
        }
        
        //获取员工数据
        List<Employee> list = pi.getList();
        for (Employee employee : list) {
            System.out.println("ID:"+employee.getEmpId()+"==>Name:"+employee.getEmpName());
        }
        
    }
    //{"code":100,"msg":"业务操作成功","extend":{"pageInfo":{"pageNum":2,"pageSize":5,"size":5,"startRow":6,"endRow":10,"total":1001,"pages":201,"list":[{"empId":7,"empName":"a28595","gender":"M","email":"a28595@qq.com","dId":1,"department":{"deptId":1,"deptName":"研发部"}},{"empId":8,"empName":"d3fd26","gender":"M","email":"d3fd26@qq.com","dId":1,"department":{"deptId":1,"deptName":"研发部"}},{"empId":9,"empName":"2e04e7","gender":"M","email":"2e04e7@qq.com","dId":1,"department":{"deptId":1,"deptName":"研发部"}},{"empId":10,"empName":"7fa738","gender":"M","email":"7fa738@qq.com","dId":1,"department":{"deptId":1,"deptName":"研发部"}},{"empId":11,"empName":"d37ac9","gender":"M","email":"d37ac9@qq.com","dId":1,"department":{"deptId":1,"deptName":"研发部"}}],"prePage":1,"nextPage":3,"isFirstPage":false,"isLastPage":false,"hasPreviousPage":true,"hasNextPage":true,"navigatePages":5,"navigatepageNums":[1,2,3,4,5],"navigateFirstPage":1,"navigateLastPage":5,"firstPage":1,"lastPage":5}}}
    @Test
    public void testResult() throws Exception {
        //模拟请求拿到返回值
        //模拟请求拿到返回值
                MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emps").param("pn", "5"))
                        .andReturn();
                 
                //请求成功以后,请求域中会有pageInfo;我们可以取出pageInfo进行验证
                MockHttpServletResponse response = result.getResponse();
                String string = response.getContentAsString();
                System.out.println(string);
                



     }
    
    @Test
    public void testFindUser() throws Exception {
        //模拟请求拿到返回值
        //模拟请求拿到返回值
        Employee employee2 = new Employee(2,"8727878","M","328989@qq.com",1);
                MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emps").param("pn", "5"))
                        .andReturn();
             
                



     }
}

 

代码的下载地址为

 链接:https://pan.baidu.com/s/1n09Io3LLqSIYV9O_GYZc6A 密码:13rq

posted on 2018-06-25 10:24  luzhouxiaoshuai  阅读(318)  评论(0编辑  收藏  举报

导航