Suite
為了建立多個(gè)用例并且讓它們一次全部運(yùn)行,你該如何做呢?
CppUnit提供了一個(gè)TestSuite類來同時(shí)運(yùn)行任意個(gè)用例。
在上面我們看到了如何運(yùn)行一個(gè)測(cè)試用例。
為了創(chuàng)建含有兩個(gè)或更多用例的suite,你應(yīng)該這么辦:
CppUnit::TestSuite suite;
CppUnit::TestResult result;
suite.addTest( new CppUnit::TestCaller<ComplexNumberTest>(
"testEquality",
&ComplexNumberTest::testEquality ) );
suite.addTest( new CppUnit::TestCaller<ComplexNumberTest>(
"testAddition",
&ComplexNumberTest::testAddition ) );
suite.run( &result );
TestSuites不必僅僅含有測(cè)試用例的caller.它們可以包含實(shí)現(xiàn)Test 接口的任意對(duì)象。例如:你可以在你的代碼中創(chuàng)建一個(gè)TestSuite,我也可以在我的代碼里建立一個(gè),我們通過建立一個(gè)同時(shí)包含它們兩個(gè)的TestSuite使它們得以同時(shí)運(yùn)行。
CppUnit::TestSuite suite;
CppUnit::TestResult result;
suite.addTest( ComplexNumberTest::suite() );
suite.addTest( SurrealNumberTest::suite() );
suite.run( &result );
TestRunner
你該如何運(yùn)行你的用例并收集測(cè)試結(jié)果呢?
一旦你有了一個(gè)TestSuite, 你會(huì)想運(yùn)行它。CppUnit提供了定義這些suite并顯示結(jié)果的工具。你可以通過在一個(gè)TestSuite中加入一個(gè)名為suite的靜態(tài)的method使你的suite與TestRunner建立聯(lián)系。
例如,為了使TestRunner可以看到一個(gè)ComplexNumberTest suite,在ComplexNumberTest中加入一下代碼:
public:
static CppUnit::Test *suite()
{
CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "ComplexNumberTest" );
suiteOfTests->addTest( new CppUnit::TestCaller<ComplexNumberTest>(
"testEquality",
&ComplexNumberTest::testEquality ) );
suiteOfTests->addTest( new CppUnit::TestCaller<ComplexNumberTest>(
"testAddition",
&ComplexNumberTest::testAddition ) );
return suiteOfTests;
}
為了使用這個(gè)版本,在Main.cpp中包含以下頭文件:
#include <cppunit/ui/text/TestRunner.h>
#include "ExampleTestCase.h"
#include "ComplexNumberTest.h"
然后在main()中加入addTest(CppUnit::Test *)的調(diào)用:
int main( int argc, char **argv)
{
CppUnit::TextUi::TestRunner runner;
runner.addTest( ExampleTestCase::suite() );
runner.addTest( ComplexNumberTest::suite() );
runner.run();
return 0;
}
TestRunner會(huì)運(yùn)行這些用例。如果所有的測(cè)試都順利通過,你會(huì)得到一個(gè)反饋。如果任何一個(gè)測(cè)試沒有通過,你會(huì)得到以下信息:
*失敗的測(cè)試用例的名字
*包含這個(gè)測(cè)試源文件的名字
*錯(cuò)誤發(fā)生的行號(hào)
*發(fā)現(xiàn)錯(cuò)誤的CPPUNIT_ASSERT()調(diào)用中的所有文字。
Helper Macros
你可能已經(jīng)注意到了,實(shí)現(xiàn)fixture中的static suite()是一個(gè)要反復(fù)要做的,并且容易出錯(cuò)的任務(wù)。我們可以使用一組寫 test fixture的宏來自動(dòng)執(zhí)行這些靜態(tài)的suite method.