您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > cppUnit
CppUnit Cookbook中文版
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2014/1/2 10:04:17 ] 推薦標(biāo)簽:CppUnit 單元測試

本文是一篇簡單的入門指導(dǎo),幫助你快速上手。

簡單測試用例(Simple Test Case)

你希望知道你的代碼是否正在工作。
你該怎么辦?
有很多種方法。使用調(diào)試器直接調(diào)試或者在你的代碼里亂丟一些流輸出指令是兩種簡單的方法,但是它們都有自己的缺點(diǎn)。直接調(diào)試代碼是個(gè)好主意,但是它不是自動(dòng)進(jìn)行的。你不得不在每次改動(dòng)代碼以后重新調(diào)試。輸出流文本也不錯(cuò),但是它使代碼變得面目可憎,并且大多數(shù)情況下,它輸出的信息比你想要的要多。

在CppUnit中測試可以自動(dòng)進(jìn)行。這些測試可以很容易被建立,并且一旦你書寫完畢,他們可以幫助你時(shí)刻了解你代碼的質(zhì)量。

為了做一個(gè)簡單的測試,下面這些是你要做的:

從TestClass中派生一個(gè)類。Override runTest()方法。當(dāng)你希望檢查一個(gè)值的時(shí)候,調(diào)用 CPPUNIT_ASSERT(bool),如果測試成功這個(gè)assert表達(dá)式可以被順利通過。

比如,為了測試一個(gè)復(fù)數(shù)類的等值比較,書寫如下:

class ComplexNumberTest : public CppUnit::TestCase {
public:
ComplexNumberTest( std::string name ) : CppUnit::TestCase( name ) {}

void runTest() {
CPPUNIT_ASSERT( Complex (10, 1) == Complex (10, 1) );
CPPUNIT_ASSERT( !(Complex (1, 1) == Complex (2, 2)) );
}
};

這是一個(gè)簡單的測試。通常來說,你會(huì)有很多小的測試用例,并且希望能在同一個(gè)對象集合中測試。為了達(dá)到這個(gè)目的,使用fixture。

Fixture
一個(gè)fixture是一組對象,被用來作為測試一組用例的基礎(chǔ)。當(dāng)你邊開發(fā)邊測試的時(shí)候,使用fixture會(huì)非常方便。

那我們嘗試一下這種開發(fā)方式,同時(shí)學(xué)習(xí)一下fixture的使用方法。假定我們是想開發(fā)一個(gè)復(fù)數(shù)的類,我們從定義一個(gè)名為Complex的空類開始。

class Complex{};

現(xiàn)在建立上面那個(gè)ComplexNumberTest測試用例,編譯它們看看會(huì)發(fā)生什么。我們注意到的第一件事是有一些編譯錯(cuò)誤。測試使用了操作符==,但是它并沒有被定義。修改如下:

bool ōperator==( const Complex & a, const Complex & b )
{
return true;
}

現(xiàn)在再次編譯并運(yùn)行之。這次編譯通過了,但是沒有通過測試。我們需要再寫些代碼使操作符==可以正確工作,所以我們再次修改代碼:

class Complex {
friend bool ōperator ==(const Complex& a, const Complex& b);
double real, imaginary;
public:
Complex( double r, double i = 0 )
: real(r)
, imaginary(i)
{
}
};

bool ōperator ==( const Complex &a, const Complex &b )
{
return eq( a.real, b.real ) && eq( a.imaginary, b.imaginary );
}

如果我們現(xiàn)在編譯并運(yùn)行,可以順利通過測試。

上一頁12345下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd