CppUnit是自動化單元測試框架的c++實現(xiàn)版本。它是XUnit(包括如JUnit,PythonUnit,DelphiUnit等)家族中的一員,是一個專門面向C++的測試框架。CppUnit 是個基于 LGPL 的開源項目,初版本移植自 JUnit,是一個非常的開源測試框架。CppUnit 和 JUnit 一樣主要思想來源于極限編程(XProgramming)。主要功能是對單元測試進(jìn)行管理,并可進(jìn)行自動化測試。
一. CppUnit 的原理
在 CppUnit 中,一個或一組測試用例的測試對象被稱為 Fixture(設(shè)施,下文為方便理解盡量使用英文名稱)。Fixture 是被測試的目標(biāo),可能是一個對象或者一組相關(guān)的對象,甚至一個函數(shù)。
有了被測試的 fixture,可以對這個 fixture 的某個功能、某個可能出錯的流程編寫測試代碼,這樣對某個方面完整的測試被稱為TestCase(測試用例)。通常寫一個 TestCase 的步驟包括:
對 fixture 進(jìn)行初始化,及其他初始化操作,比如:生成一組被測試的對象,初始化值;
按照要測試的某個功能或者某個流程對 fixture 進(jìn)行操作;
驗證結(jié)果是否正確;
對 fixture 的及其他的資源釋放等清理工作。
對 fixture 的多個測試用例,通常(1)(4)部分代碼都是相似的,CppUnit 在很多地方引入了 setUp 和 tearDown 虛函數(shù)?梢栽 setUp 函數(shù)里完成(1)初始化代碼,而在 tearDown 函數(shù)中完成(4)代碼。具體測試用例函數(shù)中只需要完成(2)(3)部分代碼即可,運行時 CppUnit 會自動為每個測試用例函數(shù)運行 setUp,之后運行 tearDown,這樣測試用例之間沒有交叉影響。
對 fixture 的所有測試用例可以被封裝在一個 CppUnit::TestFixture 的子類(命名慣例是[ClassName]Test)中。然后定義這個fixture 的 setUp 和 tearDown 函數(shù),為每個測試用例定義一個測試函數(shù)(命名慣例是 testXXX)。
下面是個簡單的例子:
class MathTest : public CppUnit::TestFixture {
protected:
int m_value1, m_value2;
public:
MathTest() {}
// 初始化函數(shù)
void setUp () {
m_value1 = 2;
m_value2 = 3;
}
// 測試加法的測試函數(shù)
void testAdd () {
// 步驟(2),對 fixture 進(jìn)行操作
int result = m_value1 + m_value2;
// 步驟(3),驗證結(jié)果是否爭取
CPPUNIT_ASSERT( result == 5 );
}
// 沒有什么清理工作沒有定義 tearDown.
}
先寫到這里,明天補充。
http://www.vckbase.com/document/viewdoc/?id=1258
http://www-128.ibm.com/developerworks/cn/linux/l-cppunit/index.html
http://www.evocomp.de/tutorials/tutorium_cppunit/howto_tutorial_cppunit_en.html