3. 手動使用步驟
首先要明確測試的對象 fixture,然后根據(jù)其功能、流程,以及以前的經(jīng)驗,確定測試用例。這個步驟非常重要,直接關系到測試的終效果。當然增加測試用例的過程是個階段性的工作,開始完成代碼后,先完成對功能的測試用例,保證其完成功能;然后對可能出錯的部分,結合以前的經(jīng)驗(比如邊界值測試、路徑覆蓋測試等)編寫測試用例;后在發(fā)現(xiàn)相關 bug 時,根據(jù) bug 完成測試用例。
比如對整數(shù)加法進行測試,首先定義一個新的 TestFixture 子類,MathTest,編寫測試用例的測試代碼。后期需要添加新的測試用例時只需要添加新的測試函數(shù),根據(jù)需要修改 setUp 和 tearDown 即可。如果需要對新的 fixture 進行測試,定義新的 TestFixture 子類即可。注:下面代碼僅用來表示原理,不能編譯。
/// MathTest.h
// A TestFixture subclass.
// Announce: use as your owner risk.
// Author : liqun (liqun@nsfocus.com)
// Data : 2003-7-5
#include "cppunit/TestFixture.h"
class MathTest : public CppUnit::TestFixture {
protected:
int m_value1, m_value2;
public:
MathTest() {}
// 初始化函數(shù)
void setUp ();
// 清理函數(shù)
void tearDown();
// 測試加法的測試函數(shù)
void testAdd ();
// 可以添加新的測試函數(shù)
};
/// MathTest.cpp
// A TestFixture subclass.
// Announce: use as your owner risk.
// Author : liqun (liqun@nsfocus.com)
// Data : 2003-7-5
#include "MathTest.h"
#include "cppunit/TestAssert.h"
void MathTest::setUp()
{
m_value1 = 2;
m_value2 = 3;
}
void MathTest::tearDown()
{
}
void MathTest::testAdd()
{
int result = m_value1 + m_value2;
CPPUNIT_ASSERT( result == 5 );
}
然后編寫 main 函數(shù),把需要測試的測試用例組織到 TestSuite 中,然后通過 TestRuner 運行。這部分代碼后期添加新的測試用例時需要改動的不多。只需要把新的測試用例添加到 TestSuite 中即可。
/// main.cpp
// Main file for cppunit test.
// Announce: use as your owner risk.
// Author : liqun (liqun@nsfocus.com)
// Data : 2003-7-5
// Note : Cannot compile, only for study.
#include "MathTest.h"
#include "cppunit/ui/text/TestRunner.h"
#include "cppunit/TestCaller.h"
#include "cppunit/TestSuite.h"
int main()
{
CppUnit::TextUi::TestRunner runner;
CppUnit::TestSuite *suite= new CppUnit::TestSuite();
// 添加一個測試用例
suite->addTest(new CppUnit::TestCaller<MathTest> (
"testAdd", testAdd));
// 指定運行TestSuite
runner.addTest( suite );
// 開始運行, 自動顯示測試進度和測試結果
runner.run( "", true ); // Run all tests and wait
}