領測軟件測試網
當今軟件測試十分盛行時,本人通過項目實踐和個人親身體會淺談單元測試,本人一直堅持“用代碼說話的原則”,同時也希望個人能給出寶貴意見,共同探討、共同進步,為中國軟件事業有更大的發展共同奮斗!
最早我們項目組開發的項目時,寫代碼都是從底層一直寫到表現層到jsp,然后開發人員在web層調試頁面,近乎98%都會報一大堆exception,然后再在代碼中加斷點一步一步查到底哪一層代碼出現問題……,比較好點做法就是在各個類中加上main方法測試,但總體很不理想,給web層開發人員的調試和質量控制人員帶來繁重的工作壓力;使用單元測試后,針對每一個方法都做嚴格的把關,大大減少調試的時間;同時質量控制人員返回過來的bug少了近60%,現在對于開發人員寫測試用例非常熟練,并且本人根據實際情況對測試用例做了點小小改動(這部分主要在后面代碼中詳述),帶來很好的效果!
單元測試到底給實際開發帶來什么好處那?
(1) (1)首先對于開發人員來說大大減少調試工作的時間,同時也規范了對于代碼安全管理(我們知道那些方法是可以調用的);
(2) (2) 對于整個項目來說,有了完整的測試,保證項目最后交付測試有了可靠依據;
(4) (4)對于項目經理整個項目達到很好的可控;
(5) (5)最主要的完整的單元測試給后期維護人員帶來很大的便捷!
單元測試好處可能還有很多,但本人只能理解和感悟這么多,希望觀者補充!
單元測試配置:
我將使用eclipse+myEclopse給大家介紹關于JUNIT的環境的簡單配置;右鍵點擊項目選擇“屬性”,在彈出窗口中到環境變量中添加junit.jar包,這樣下一步我們就可以進行單元測試了;
使用eclipse快速開發test Case:
如下圖:右鍵選擇你要測試的類,在新建中點擊“JUnit 測試用例”,
彈出對話框,配置測試名稱和根目錄,添加注釋等,再點擊“下一步”到下圖:
選擇你要測試類中的方法,點擊完成!便生成測試類的基本框架,如下代碼,我們以對一個DAO類測試為例:

/**//*
* Copyright reserved 2005 by XXXXCo. Ltd.
* Author:Fu wei Date:2006-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單元測試一共要注意一下幾點:
(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 測試”,就運行測試類!