> For the complete documentation index, see [llms.txt](https://dwatow.gitbook.io/cppunit-cookbook-in-traditional-chinese/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dwatow.gitbook.io/cppunit-cookbook-in-traditional-chinese/test_case.md).

# Test Case

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

這過程有兩個步驟:

1. 在fixture類別中，把`test cases`寫成一個個的函數(method)
2. 建立執行這些`test cases`函數的`TestCaller`物件。&#x20;

這是含有一些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
