JUnit in java

 

單元測試配置:

      選擇你要測試類中的方法,點擊完成!便生成測試類的基本框架,如下代碼,我們以對一個DAO類測試為例:

/**//*
 * Copyright reserved 2005 by XXXXCo. Ltd.
 * Author
Fu wei    Date2006-9-4
 */



import junit.framework.TestCase;

/** */
/**
 * 
@author Fu wei
 */

public class OrgTypeDAOTest extends TestCase ...{
    /** */
/**
     * 
@param arg0
     */

    
public OrgTypeDAOTest(String arg0) ...{
        
super(arg0);
    }

    /**/
/* 
     * @see junit.framework.TestCase#setUp()
     */

    
protected void setUp() throws Exception ...{
        
super.setUp();
    }

    /**/
/* 
     * @see junit.framework.TestCase#tearDown()
     */

    
protected void tearDown() throws Exception ...{
        
super.tearDown();
    }
    /** */
/**
     *  
主函數
     * 
@param args
     */

    
public static void main(String[] args)...{
        TestRunner.run(OrgTypeDAOTest .
class);
    }
    /** */
/**
     * {
@link OrgTypeDAO#getOrgTypeList()} 的測試方法。
     */

    
public final void testGetOrgTypeList() ...{
        fail("
尚未實現"); // TODO
    }

    /** */
/**
     * {
@link OrgTypeDAO#insertOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的測試方法。
     */

    
public final void testInsertOrgTypeInfo() ...{
        fail("
尚未實現"); // TODO
    }

    /** */
/**
     * {
@link OrgTypeDAO#deleteOrgTypeInfo(java.lang.String)} 的測試方法。
     */

    
public final void testDeleteOrgTypeInfo() ...{
        fail("
尚未實現"); // TODO
    }

    /** */
/**
     * {
@link OrgTypeDAO#updateOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的測試方法。
     */

    
public final void testUpdateOrgTypeInfo() ...{
        fail("
尚未實現"); // TODO
    }

    /** */
/**
     * {
@link OrgTypeDAO#getOrgTypeInfoById(java.lang.String)} 的測試方法。
     */

    
public final void testGetOrgTypeInfoById() ...{
        fail("
尚未實現"); // TODO
    }

    /** */
/**
     * {
@link OrgTypeDAO#isRepeatOrgTypeInfo(java.lang.String)} 的測試方法。
     */

    
public final void testIsRepeatOrgTypeInfoString() ...{
        fail("
尚未實現"); // TODO
    }

    /** */
/**
     * {
@link OrgTypeDAO#isRepeatOrgTypeInfo(com.zhjy.mltx.vo.OrgTypeVO)} 的測試方法。
     */

    
public final void testIsRepeatOrgTypeInfoOrgTypeVO() ...{
        fail("
尚未實現"); // TODO
    }

    /** */
/**
     * {
@link OrgTypeDAO#getFlatOrgIdByName(java.lang.String)} 的測試方法。
     */

    
public final void testGetFlatOrgIdByName() ...{
        fail("
尚未實現"); // TODO
    }
}

 

 JUnit單元測試一共要注意一下幾點:

1import 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);
    }    
    /**/
/* 初時化方法
     * @see junit.framework.TestCase#setUp()
     */

    
protected void setUp() throws Exception ...{
        
super.setUp();
        
//測試初始話數據調用類 orgTypeDAO 封裝數據的對象orgTypeVO
    }

    /**/
/* 執行完清理方法
     * @see 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中海測試");
    }
    /**/
/*
     * 
獲取數據方法(主?。?span lang="EN-US">
     * 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()方法中供調用;