介紹
這個測試框架只有125行的單個頭文件。它的目的是提供一種簡單的方式來對c++進行單元測試。因為簡單,它還能狗容易定制。一些測試框架都需要鏈接分離的庫文件或者經過多次跳轉才能工作,這就使得寫case是一件非常難得事情了。
其中一種情況是開發人員經常碰到當他們需要寫單元測試用例的時候他們已經工作于項目上了。如果這個項目不應獨立的庫而壞掉,這就很難寫出獨立的單元測試用例。另外,一些程序的一些核心function不能簡單的被破壞成一個單獨可執行的用例。實際上,一個開發人員應該寫一些單元測試用例,在一個程序內部調用自己的function,可以簡單的使用#define。
這看起來不像一種很好的軟件工程方法,但是,這些都是盡早測試,通常比其它方法更好,用最小的努力來寫測試,最早的完成。測試集合隨著項目前進而增長,由于時間限制測試就能集合到一個單獨的庫和可執行的東東。
我開始尋找一個現成的解決方案。在互聯網上有很多xUnit的測試框架,比如Smalltalk SUnit,JUnit,NUnit,CppUnit等等
但是很多框架都有一個共同的就是能夠讓它的屬性在一個function中run起來,或者讓其自動的跑起來。C++程序員沒有那么幸運,因為需要做很多手工的工作比如宏,模板之類的,盡管不是大的工作。
設計
在評估一些測試框架后,我決定它們都不是能夠滿足我的簡單的而且能夠使用修改的要求。我決定寫一個測試框架,寫到一個頭文件中,盡量只包含盡量少的代碼。這里列出設計原則:
能夠在一個單獨的頭文件中(沒有模塊或庫)
幾百行代碼
易于修改擴展
信息輸出
可選宏
不要模板
不要動態內存分配
用于嵌入式系統中
用兼容與低級別的C++ compilers (沒有超炫的功能)
使用Code
建立case有三件事需要做
一個測試用例test case
一個測試集合test suite
測試集合需要添加到runner然后被調用
寫一個case
這個例子中,我們從TestCase基類派生出我們的測試用例
TestCase,像其他的框架的一樣,是一個結構體,能夠幫助我們避免一些公共訪問。
測試code被加到一個測試方法中,TestSuite類含有一切能夠讓所有測試用例能夠訪問的任何數據,能夠傳遞到每個測試用例的函數。當測試失敗事件是能夠輸出有意義的輸出。
struct TestAccountWithdrawal : TestCase
{
const char* name() { return "Account withdrawal test"; }
void test(TestSuite* suite)
{
TestAccountSuite* data = (TestAccountSuite*)suite;
data->account->Deposit(10);
bool succeeded = data->account->Withdraw(11);
T_ASSERT(succeeded == false);
T_ASSERT(data->account->Balance() == 10);
}
};
文章來源于領測軟件測試網 http://www.kjueaiud.com/