下一頁 1 2
這是我以前任項目經理時,編寫的關于單元測試方面的作業指導書,針對多種開發環境敘述怎么進行單元測試以及環境配置,現在整理了一下。應該對大家有所幫助。
這是第一部分,主要針對C和C++項目的(包括了Windows環境和Linux環境),下部分將針對Java及J2EE項目。
1. 目的
為了減少代碼中的錯誤數量, 減少調試所花的時間和精力, 改善軟件質量, 減少開發和維護的時間和成本。
2. 適用范圍
適用于C及C++的所有產品。
3. 適用內容
3.1 C++標準
3.1.1測試環境使用Visual C++,Windows窗口應用程序
3.1.1.1前題:使用CppUnit1.6.2版,解壓后,路徑為x:\\cppunit-1.6.2;
在工程文件中配置測試框架使用環境:加入執行頭文件的路徑x:\\cppunit-1.6.2\include,加入導入庫文件的路徑x:\\cppunit-1.6.2\lib;
配置DEBUG(測試)版環境:
加入需要鏈接的靜態測試框模塊testrunnercd.lib(運行測試用例的選擇對話框)和cppunitcd.lib(測試框架);
加入測試Add-ins,庫名為x:\\cppunit-1.6.2\lib\TestRunnerDSPlugInD.dll;
在Project Settings/C++/C++ Language中啟用RTTI;
3.1.1.2建立測試用例:
1、以類名加前輟“Test”命名測試單元文件名,比如“CMabString”類的類文件名為MabString.cpp,則測試單元文件命名為TestMabString.cpp;
2、加入測試框架頭文件以及要測試的單元頭文件,以TestMabString為例:
頭文件:testmabstring.h
clearcase/" target="_blank" >cc66 width="90%" align=center bgColor=#eefffe border=1>
#ifndef CPP_UNIT_TestNode_H
#define CPP_UNIT_TestNode_H
//包含測試框架的頭文件
#include <cppunit/TestCase.h>
#include <cppunit/extensions/HelperMacros.h>
//包含被測試單元的頭文件
#include "mabstring.h"
//派生測試框架的測試用例類
class TestMabString : public CppUnit::TestCase
{
//定義測試用例列表,此列表將出現在運行測試用例的選擇對話框中
CPPUNIT_TEST_SUITE( TestMabString );
CPPUNIT_TEST( FindByName );
CPPUNIT_TEST_SUITE_END();
protected:
//
CMabString m_MabStr;
public:
//用例初始化,可作為樁函數
void setUp ();
//用例析構
void tearDown();
protected:
//測試用例
void FindByName (void);
};
#endif
類文件:testmabstring.cpp
#include "TestMabString.h"
#include "iostream.h"
#include "strstrea.h"
//注冊本測試單元
CPPUNIT_TEST_SUITE_REGISTRATION( TestMabString );
//定義測試用例
void TestMabString::FindByName ()
{
//功能性測試,屬黑盒測試
//normal test
//條件及錯誤測試,屬白盒測試
//extra test,
//例外測試,屬白盒測試
//exception test,
bool bRet=false;
try{
//put the exception code here...
}
//catch(CXXX& e)
catch(...)
{
bRet=true;
}
CPPUNIT_ASSERT(bRet);
//由于并不能夠執行所有單元測試應該執行的路徑,比如CMabString是從CString
//類中派生出來的,而可能CMabString中的Find只簡單調用了CString中的Find方法,//所以并不需要測試;
//在此處說明所有不用測試的路徑;
//other test, see the ...
}
void TestMabString::setUp ()
{
//開始測試前的初始代碼
m_pNode=new Node();
}
void TestMabString::tearDown()
{
//測試結束代碼
if(m_pNode)
delete m_pNode;
}