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