現(xiàn)在我們準(zhǔn)備添加一些新的操作符和新的測(cè)試用例。這時(shí)使用一個(gè)fixture會(huì)很方便。如果我們實(shí)例化3到4個(gè)復(fù)數(shù)并在測(cè)試中反復(fù)使用它們,可能我們的測(cè)試會(huì)更好些。
我們這樣做:
* 為fixture的每個(gè)部分添加成員變量。
* Override setUp() 初始化這些變量。
* Override tearDown()釋放你在setUp()中使用的資源。
class ComplexNumberTest : public CppUnit::TestFixture {
private:
Complex *m_10_1, *m_1_1, *m_11_2;
protected:
void setUp()
{
m_10_1 = new Complex( 10, 1 );
m_1_1 = new Complex( 1, 1 );
m_11_2 = new Complex( 11, 2 );
}
void tearDown()
{
delete m_10_1;
delete m_1_1;
delete m_11_2;
}
};
一旦我們擁有了這個(gè)fixture,我們可以添加操作符+,以及整個(gè)開發(fā)過程中其他的任何操作符。
Test Case
為了使用一個(gè)fixture來調(diào)用單獨(dú)的測(cè)試,該如何做呢?
分為兩個(gè)步驟:
*以一個(gè)method的形式,在fixture類中寫一個(gè)測(cè)試用例
*創(chuàng)建TestCaller來運(yùn)行那個(gè)method
這里是我們加了一些額外的用例method書寫的測(cè)試類:
private:
Complex *m_10_1, *m_1_1, *m_11_2;
protected:
void setUp()
{
m_10_1 = new Complex( 10, 1 );
m_1_1 = new Complex( 1, 1 );
m_11_2 = new Complex( 11, 2 );
}
void tearDown()
{
delete m_10_1;
delete m_1_1;
delete m_11_2;
}
void testEquality()
{
CPPUNIT_ASSERT( *m_10_1 == *m_10_1 );
CPPUNIT_ASSERT( !(*m_10_1 == *m_11_2) );
}
void testAddition()
{
CPPUNIT_ASSERT( *m_10_1 + *m_1_1 == *m_11_2 );
}
};
我們可以象下面這樣為每個(gè)測(cè)試用例創(chuàng)建并運(yùn)行一個(gè)實(shí)例:
CppUnit::TestCaller<ComplexNumberTest> test( "testEquality",
&ComplexNumberTest::testEquality );
CppUnit::TestResult result;
test.run( &result );
TestCaller的構(gòu)造函數(shù)的第二個(gè)參數(shù)是ComplexNumberTest中對(duì)應(yīng)method的地址。當(dāng)這個(gè)TestCaller運(yùn)行的時(shí)候,指定的method會(huì)運(yùn)行。但是,這個(gè)辦法也效果不彰,因?yàn)樗伙@示診斷信息。我們可以使用TestRunner(下面會(huì)講到)來顯示這個(gè)診斷信息。
一旦我們有了幾個(gè)測(cè)試用例,可以把它們歸入一個(gè)suite中。