在進行測試驅動的過程中,有一點是很重要的,那就是保持它的旋律。好比一出精彩的電影,有黯然神傷的低谷,也有激情澎湃的高潮。測試驅動開發的旋律就是:設計測試用例,編寫最少的代碼通過測試,重構代碼,設計下一個測試用例。其中,在編寫代碼通過測試及重構代碼的過程往往需要幾個迭代過程,期間跌宕起伏,精彩刺激。在設計好測試用例后,對其進行編譯,這時將會遭遇到第一個低谷:編譯錯誤。我們的努力目標是通過編譯,這時候,我們編寫最少的代碼通過編譯,這樣迎來了第一個上升期,但是又將面臨則測試無法通過的問題,于是再接再厲,增加代碼的功能,這樣,我們通過了測試,也迎來了第一個高潮。美好的事情總是需要變得更美好,于是我們著手對代碼進行修整,使它更優雅,我們不允許任何的重復,copy&paste是我們的死敵,不允許看不懂的代碼,那是理解的障礙,不允許任何不新鮮的味道從代碼中飄出。重構將幫助我們達到盡善盡美,而這一切的代價僅僅是幾分鐘的時間。但是,不要操之過急,否則會燙壞舌頭的。一步一步的進行,每次的修改都要保證之前通過的測試,這樣,我們最終將穩步的達到幸福的彼岸!
人都是有惰性的,惰性常常與失敗,錯誤聯系在一起。但是,惰性也代來了很多的好處。又是一個反其道而行之的例子。在使用測試驅動的過程中,如果每次進行測試都需要組織測試的環境及輸出格式,并且比較屏幕上飛出來的數據,那么,再勤勞的人也無法堅持這項工作,測試驅動也將成為一個美麗的空中樓閣。要充分發揮測試驅動的威力,必須具備以下“必要非充分”條件:能夠方便建立測試環境;有良好的輸出形式;可以方便的比較測試結果。有了以上條件后,人們可以在彈指間建立測試環境,進行頻繁的測試,讓自己的代碼在出山前接受頻繁的考驗。JUnit是Kent Beck大師建立起的一套JAVA環境下的單元測試框架。它能夠滿足上述測試驅動的必要條件,提供了方便的測試環境,良好的屏幕輸出以及結果比對機制。雖然JUnit是JAVA的,但是測試驅動卻是所有開發者的。對于行走于CPP世界的人們,CPPUnit可以滿足他們的要求。 CPPUnit是Michael Feathers建立一個開放源碼的單元測試庫,是JUnit的C++版本,同樣提供了便利的條件。它的老巢位于http://sourceforge.net/projects/cppunit/。在將CPPUnit應用于測試驅動開發之前,首先要明了幾個概念:CPPUnit按照層次管理測試。最底層的就是Test Case,這里是測試代碼存在的地方,換句話說,就是測試函數。當有了幾個Test Case以后,可以把他們組織成Test Fixture。在Test Fixture中,可以建立被測試的類的實例,并編寫Test Case對類實例進行測試。當有了多個Test Fixture后就可以使用Test Suite來對測試進行管理。借用CPPUnit上的例子,需要設計一個復數類,首先希望復數類能夠使用“==”進行判斷,因此,先構思一個Test Case:
class ComplexNumberTest : public CppUnit::TestCase {
public:
原文轉自:http://www.anti-gravitydesign.com