下面是CPPUnit的一個簡單例子.
class?SimpleCalcTest?:?public?CPPUNIT_NS::TestFixture
{
????CPPUNIT_TEST_SUITE(?SimpleCalcTest?);
????CPPUNIT_TEST(?testAdd?);
????CPPUNIT_TEST(?testSub?);
????CPPUNIT_TEST(?testMul);
????CPPUNIT_TEST(?testDiv?);
????CPPUNIT_TEST_SUITE_END();
private?:
????SimpleCalculator?*?sc;
public:
????virtual?void?setUp()
????{
????????sc?=?new?SimpleCalculator();
????}
????virtual?void?tearDown()
????{
????????delete?sc;
????}
????void?testAdd(){
????????CPPUNIT_ASSERT_EQUAL(?sc->add(5,6),?11);
????}
????void?testSub(){
????????CPPUNIT_ASSERT_EQUAL(?sc->sub(5,6),?-1?);
????}
????void?testMul(){
????????CPPUNIT_ASSERT_EQUAL(?sc->mul(5,6),?30?);
????}
????void?testDiv(){
????????CPPUNIT_ASSERT_EQUAL(?sc->div(12,6),?2?);
????}
};
//?把這個TestSuite注冊到名字為"alltest"的TestSuite中,?如果沒有定義會自動定義
//?也可以CPPUNIT_TEST_SUITE_REGISTRATION(?MathTest?);注冊到全局的一個未命名的TestSuite中.
CPPUNIT_TEST_SUITE_REGISTRATION(?SimpleCalcTest,?"alltest"?);
int?main()
{
????CPPUNIT_NS::TestResult?r;
????CPPUNIT_NS::TestResultCollector?result;
????r.addListener(?&result?);
????
????//?從注冊的TestSuite中獲取特定的TestSuite,?沒有參數(shù)獲取全局的未命名的TestSuite.
????CPPUNIT_NS::TestFactoryRegistry::getRegistry("alltest").makeTest()->run(?&r?);
????CPPUNIT_NS::TextOutputter?out(?&result,?std::cout?);
????out.write();
????return?0;
}
從上面的代碼可以看到, 使用CPPUnit 主要是兩個步驟:
1. 創(chuàng)建TestSuite
首先從CPPUNIT_NS::TestFixture 生成一個子類, 然后用宏 CPPUNIT_TEST_SUITE, CPPUNIT_TEST, CPPUNIT_TEST_SUITE_END 來定義要測試的各個小單元, 并且實現(xiàn)CPPUNIT_TEST 中定義的類函數(shù); 在每個類函數(shù)中使用 CPPUNIT_ASSERT, CPPUNIT_ASSERT_MESSAGE, CPPUNIT_FAIL, CPPUNIT_ASSERT_EQUAL, CPPUNIT_ASSERT_EQUAL_MESSAGE, CPPUNIT_ASSERT_DOUBLES_EQUAL 等來對結果進行斷言.
然后通過宏 CPPUNIT_TEST_SUITE_REGISTRATION 將測試類注冊到TestSuite中.
2. Main
在main程序中對TestSuite 進行測試.
CPPUnit的更詳細的資料可以查看:
IBM 的
便利的開發(fā)工具 CppUnit 快速使用指南? 比較詳細的介紹了CppUnit
VCKBase的
CppUnit測試框架入門 詳細的介紹了VC6下MFC Dialog下的CPPUnit的使用
CSDN 的
如何使用CppUnit做單元測試 介紹了VC6的MFC 下的CPPUnit的使用, 和VCKBase的實現(xiàn)稍微有點差別
Meng Yan ( 孟巖 ) 的文章
CPPUnit Lite 對CPPUnit的使用和宏進行了簡單的分析