Created Saturday 05 March 2011
最近閱讀了晨光(Morning)寫的CppUnit源代碼解讀
文檔,文檔寫的非常不錯。下面是自己學習的一些總結。
CppUnit 中主要的類
TestCase
TestCase 代表一個測試用例,TestSuit 包含一組測試用例,這兩個類使用了Composite Pattern。
TestFixture
定義了運行測試用例的準備(setup)、清理(tearDown)操作接口。TestCase 執行時,依次調用setup, run,
tearDown,這些函數需要在派生類中提供具體實現。這裏用到了 Template Method
Pattern。TestCase類並不直接使用,定義測試用例時用TestCaller 。
在類的設計中,沒有將
TestFixture和Test的功能定義在一個類中,體現了“接口隔離”原則。
TestDecorator使用了Decorator
Pattern。這個類中需要重新定義基類中的接口,去除接口的virtual屬性。
TestCaller的功能不太容易理解。它建立
了TestFixture類和Test Method之間的綁定關係。定義測試用例的過程如下:
1) 從TestFixture派生出測試類;
2)
在測試類中定義Test Method;
3) 在TestCaller 對象中,將測試類和Test Method綁定;
4)
將TestCaller對象添加到TestSuit 對象中;
TestResult
SynchronizedObject:提供了互斥機制,需要使用互斥機制的類從這個類派生。
在這個類中,包含ExclusiveZone、
SynchronizationObject兩個內部類。SynchronizationObject提供了lock、unlock操作接口,使用者需要
提供和具體平臺相關的實現。在需要進入互斥區域的時候,定義ExclusiveZone
對象,該對象的構造函數、析構函數中將會調用SynchronizationObject的lock、unlock。
Observer
Pattern:TestResult和TestListener的角色分別是Subject和Observer。可以有多個對象對測試結果做出響應。
TextTestResultListener:
保存測試結果狀態。
TestResultCollector:收集Failures。
TestFactory
TestFacotryEntry負責管理TestFacotry對象,使用map保存name和TestFactory的映射關係。
NameEntries
負責管理TestFactoryEntry對象,使用map保存name和TestFactoryEntry的映射關係。這個類只能有一個對象實例,爲
此,使用Singleton Pattern。