JUnit单元测试一共要注意一下几点:
(1)import junit.framework.TestCase 和 junit.textui.TestRunner;
(2)继承junit.framework.TestCase ;
(3)自行添加一个main方法    中调用TestRunner.run(测试类名.class);
(4)有一个调用super(String)的构造函数;
        以上都是JUnit必有的特征,除以上外,我们发现有许多以test开头的方法,而这些方法正是我们要测试的方法,Junti测试其实采用的是断言的方式,只要我们在所有test开头中的方法对数据添加断言方法,同时提供很多断言的方法,

常用断言方法
assertEquals("失败提示信息","期望数据","测试数据") 断言获取数据是否与所期望的相等
assertNotNull("失败提示信息","测试数据") 断言获取数据不为null,否则提示错误
assertNull("失败提示信息","测试数据") 断言获取数据是为null,否则提示错误
assertTrue("失败提示信息",测试数据blooean值) 断言获取数据是否为ture,否则提示错误
fail("失败提示信息"); 此方法一般放到异常处,遇到此方法,测试将停止!
assertSame("失败提示信息","期望数据","测试数据") 断言获取数据是否与所期望的相同

当我们写完所有方法策略后,JUnit测试如下图:
在方法页面中点击右键在“调试方式”或“运行方式”中点击“JUnit测试”,就运行测试类!

 

 

在执行测试类时,执行的大概过程

(1)先执行构造方法public OrgTypeDAOTest(String arg0) ;

(2)再执行初始化数据方法protected void setUp() ;

(3)再执行以test开头的测试方法;

(4)最后执行protected void tearDown()方法清理对象;

如果测试失败或者错误,将会显示一个红色的亮条;如果测试通过将显示绿色亮条;如下图


 

这样就把一个整个单元测试操作例子演示完成!

可能对于一个测试类中有多个方法要测试,对于后面看着的确有些困难,因此,我对上测试类进行简单的调整,如下代码:

 


import junit.framework.TestCase;
import junit.textui.TestRunner;
import com.zhjy.mock.SpringMock;

/**
 * 举例测试类
 */
public class OrgTypeDAOTest extends TestCase {    //(1)继承TestCase 

    //private OrgTypeDAO orgTypeDAO;
    //private OrgTypeVO orgTypeVO;
    //private String id ;
    /**
     *  构造方法
     * @param arg0 
     */
    public OrgTypeDAOTest(String arg0) {
        super(arg0);
    }    
    /* 初时化方法
junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception {
        super.setUp();
        //测试初始话数据调用类 orgTypeDAO和 封装数据的对象orgTypeVO
    }

    /* 执行完清理方法
junit.framework.TestCase#tearDown()
     */
    protected void tearDown() throws Exception {
        //清空 对象  ;==null
        //orgTypeDAO =null;
        //orgTypeVO =null;
        super.tearDown();
    }
    /**
     *  主函数
     * @param args
     */
    public static void main(String[] args){

        TestRunner.run(OrgTypeDAOTest.class);
    }
    /**
     * 测试方法
     * Test method testOrgTypeInfo
     */
    public void testOrgTypeInfo() {
        //添加
        String id = insertOrgTypeInfo();
        //列表
        orgTypeList();
        //修改
        updateOrgTypeInfo(id);
        //查询
        selectOrgTypeInfoById(id);
        //校验
        iExistOrgByOrgTypeId(id);
        //测试是否重复数据方法(add)
        isRepeatOrgTypeInfo(orgTypeVO.getName(),"");
        //获取数据方法(根据名称)
        selectOrgTypeIdByName(orgTypeVO.getName());
        //删除
        deleteOrgTypeInfo(id);
    }
    /*
     *添加初始数据
     */
    private void setOrgTypeVOAddInfo() {
        orgTypeVO.setName("add中海测试");
        orgTypeVO.setDescription("add中海测试");
        orgTypeVO.setStatus("1");
    }
    /*
     *添加初始数据
     */
    private void setOrgTypeVOUpdateInfo() {
        
        //orgTypeVO.setId(id);
        orgTypeVO.setName("add中海测试");
        orgTypeVO.setDescription("update中海测试");
        orgTypeVO.setStatus("1");
    }
    /*
     * 新增方法
     * Test method for {@link OrgTypeDAO#insertOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
     */
    public String insertOrgTypeInfo() {
        setOrgTypeVOAddInfo();
        String id = null;
        try{
            id = orgTypeDAO.insertOrgTypeInfo(orgTypeVO);
        }catch(Exception e){
            fail("添加通用组织机构失败!");
        }
        return id;
    }
    /*
     * 更新方法
     * Test method for {@link com.zhjy.mltx.dao.OrgTypeDAO#updateOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
     */
    public void updateOrgTypeInfo(String id) {
        setOrgTypeVOUpdateInfo();
        orgTypeVO.setId(id);
        try{
            orgTypeDAO.updateOrgTypeInfo(orgTypeVO);
        }catch(Exception e){
            assertTrue("修改通用组织机构失败!", false);
        }
        //查询
        orgTypeVO = orgTypeDAO.selectOrgTypeInfoById(id);
        assertEquals("修改通用组织机构失败!", orgTypeVO.getDescription(), "update中海测试");
    }
    /*
     * 获取数据方法(主健)
     * Test method for {@link OrgTypeDAO#selectOrgTypeInfoById(java.lang.String)}.
     */
    public void selectOrgTypeInfoById(String id) {
        orgTypeVO = orgTypeDAO.selectOrgTypeInfoById(id);
        assertTrue("无法查看一条通用机构名称信息!",orgTypeVO != null);
        assertEquals("添加通用组织机构失败!", orgTypeVO.getName(), "add中海测试");
        assertEquals("修改通用组织机构失败!", orgTypeVO.getDescription(), "update中海测试");
    }

    /*
     * 测试此通用组织机构是否被引用
     * Test method for {@link OrgTypeDAO#iExistOrgByOrgTypeId(java.lang.String)}.
     */
    public void iExistOrgByOrgTypeId(String id) {
        boolean isfalse;
        try {
            isfalse = this.orgTypeDAO.iExistOrgByOrgTypeId(id);
            assertFalse("通用组织机构校验错误!",isfalse);
        } catch (DataAccessException e) {
            assertTrue("通用组织机构数据操作错误!!",false);
        } catch (ObjectNotFoundException e) {
            assertTrue("id is null!!",false);
        }
        
    }
    /*
     * 删除
     * Test method for {@link OrgTypeDAO#deleteOrgTypeInfo(java.lang.String)}.
     */
    public void deleteOrgTypeInfo(String id) {
        this.orgTypeDAO.deleteOrgTypeInfo(id);
        orgTypeVO = this.orgTypeDAO.selectOrgTypeInfoById(id);
        assertNull("删除通用组织机构失败!", orgTypeVO);
    }
    /*
     * 获取数据方法(根据名称)
     * Test method for {@link OrgTypeDAO#selectOrgTypeIdByName(java.lang.String)}.
     */
    public void selectOrgTypeIdByName(String name) {
        String orgtypeid = orgTypeDAO.selectOrgTypeIdByName(name);
        //assertEquals(orgtypeid, id);
        assertNotNull("未查出来通用组织机构ID!",orgtypeid);
    }
    /*
     * 测试是否重复数据方法
     * Test method for {@link OrgTypeDAO#isRepeatOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)}.
     */
    public
 
void isRepeatOrgTypeInfo(String name,String id) {
        //setOrgTypeVOUpdateInfo();
        OrgTypeVO orgtypetest = new OrgTypeVO();
        orgtypetest.setId(id);
        orgtypetest.setName(name);
        boolean isTrue = orgTypeDAO.isRepeatOrgTypeInfo(orgtypetest);
        //assertEquals("通用组织机构错误数据",isTrue, false);
        assertTrue("通用组织机构错误数据", isTrue);
    }
    /*
     * 列表方法
     * Test method for {@link com.zhjy.mltx.dao.OrgTypeDAO#orgTypeList()}.
     */
    public void orgTypeList() {
        List list = orgTypeDAO.orgTypeList();
        assertNotNull("无法获取通用机构名称列表list is null!",list);
    }

}



处理过程:
1)把所有以test开头的方法中的方法名称前的test去掉(例如把testOrgTypeList()改为orgTypeList()方法);
2)同时添加一个以test开头的方法,并调用测试方法;这样做主要是因为执行测试时JUnit(除本身特有的方法出外)只执行以test为开头的方法;
3)同时大家注意到我还把测试初始数据放到两个private方法中private void setOrgTypeVOAddInfo()private void setOrgTypeVOUpdateInfo()方法中供调用;
        大家可能认为很简单,就是这样简单的改动带来很大的方便,大家是否注意到,我以后运行测试用例时,只关心public void testOrgTypeInfo() 方法就行了,因为只要各个方法的断言策略定制完成,一般就不会再改动,因此,后期的回归测试还是验收测试,缩小了我们对测试的关注点,同时对后面写 test suite构建整体测试带来极大方便性!其中的好处相信只有使用才能体会!
     说到这,就此暂告一段落!由于时间仓促,书写不规范和关于任何问题处敬请指出,相互探讨,后面将讨论《单元测试在整个项目中的整体构建》,谢谢!后续!