Helper Macros
也許你已注意到,實作fixture的static函數suite()
是重覆、容易出錯的細節。參考Writing test fixture
這篇,創造一系列隱藏實作suite()
細節的marco。
接著,用這些macro再重寫ComplexNumberTest的程式碼:
首先,我們先宣告CPPUNIT_TEST_SUITE(),把class name當參數丟進macro。
省下在static suite()裡,建立CppUnit::TestSuite物件,建構子參數為class name這些細節。接著,用CPPUNIT_TEST()宣告fixture裡的每一個test case。
最後,加上CPPUNIT_TEST_SUITE_END()結束整個宣告。
重點來了!suite()函數的實作細節都省下來了。
而fixture其它部份,保持不變:
隱藏的細節還包含,加到suite(CppUnit::TestSuite
)的TestCaller,它用的類別,就是fixture的類別名稱,以及在該類別裡的函數名稱。在這裡,指的是ComplexNumberTest::testEquality
和ComplexNumberTest::testAddition
。
helper macro
已經幫你寫好一些常用的assertion。例如確認ComplexNumber在除以0時會throw出MathException。
在使用marco的suite段落中,加上CPPUNIT_TEST_EXCEPTION(),並且將test case函數名稱與預期會throw出來的exception型別當作參數丟進去。
撰寫test case函數
如果預期的exception沒有throw出來,報告中會記錄asserttion failure,測試不通過。
譯註
原文: automatically implements the static suite() method. 翻譯成:「可以隱藏static函數
suite()
的實作細節」意同「自動化實作....這個函數」好怪!所以這樣翻。原文: "ComplexNumberTest.testEquality" and "ComplexNumberTest.testAddition"。 翻譯成:
ComplexNumberTest::testEquality
和ComplexNumberTest::testAddition
。 在C++中,通常會用::
接函數名稱,表示「類別裡的函數」;用.
接函數名稱,表示「 物件裡的函數」comon應該是common的筆誤。
Last updated