Test Case

你如何寫幾個可以各別執行的測試到一個fixture裡面?

這過程有兩個步驟:

  1. 在fixture類別中,把test cases寫成一個個的函數(method)

  2. 建立執行這些test cases函數的TestCaller物件。

這是含有一些test case函數的類別:

//ComplexNumberTest.h
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;
  }

  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 );
  }
};

像這樣可以建立和執行的每個test cases實體:

CppUnit::TestCaller<ComplexNumberTest> test("testEquality", &ComplexNumberTest::testEquality);
CppUnit::TestResult result;
test.run(&result);

test caller建構子的第二個參數,是一個ComplexNumberTest的一個函數位址。當test caller執行時,函數就會跟著執行。 不過,一般不會這樣做,因為沒有顯示任何診斷結果 一般來說會用TestRunner(後面會介紹)它會顯示測試結果。

一旦測試變多時,就將他們組合成一個suite

譯註:

  • 在Java稱method, 在C++稱function,在此為統一中文稱呼,使用「函數」。

  • address of a method 函數位址,個人認為義同function pointer

Last updated