當乙個介面需要重複測試時,就需要考慮將這個重複的次數放到什麼地方了,repeatedtest就是用來裝飾乙個普通測試用例的。其宣告如下:
class cppunit_api repeatedtest : public testdecorator //testdecorator直接從test派生
void run( testresult *result );
int counttestcases() const;
private:
repeatedtest( const repeatedtest & );
void operator=( const repeatedtest & );
const int m_timesrepeat;
};可以看到它的建構函式接受乙個test指標和執行次數作為引數,也就是用重複的次數來修飾這個普通的test物件這個test物件可能是testsuite物件,也可能是testcaller物件,如果是testsuite物件就會將它包含的測試用例全部重複執行,它能這樣做,repeatedtest的run方法是關鍵:
// runs a repeated test
void
repeatedtest::run( testresult *result )
}所以如果想重複測試的話就這樣做:
// add the top suite to the test runner
cppunit_ns::testrunner runner;
cppunit_ns::test* ptest = cppunit_ns::testfactoryregistry::getregistry("my test").maketest();
cppunit_ns::repeatedtest* prepeatedtest = new cppunit_ns::repeatedtest(ptest, 4);
runner.addtest( prepeatedtest );
這樣整個測試套件包含的測試用例會被重複執行4次,可以看出裝飾類也不象經典定義的那樣,僅僅列印下footer和header之類的東西,它需要接受引數來裝飾被裝飾的類。再整點有意思的:
cppunit_ns::repeatedtest* prepeatedtest_2 =
new cppunit_ns::repeatedtest(new cppunit_ns::repeatedtest(ptest, 4), 5);
這樣就顯示出裝飾鏈的樣子了,這個測試套件會被測試20次!
cppunit與單例模式
cppunit用到單例模式的地方只有一處,那就是在testfactoryregistry.cpp檔案的testfactoryregistrylist類中,它提供乙個靜態類函式如下 static testfactoryregistrylist getinstance static testfactor...
java與模式 裝飾模式
第四個設計模式 裝飾模式 裝飾模式是對物件功能增強時,平時使用繼承的一種替代方案 一 uml示意圖 二 組成部分 1.抽象構件 原始的功能介面 2.具體構件 具體的原始功能類 3.裝飾角色 持有具體構件類的物件,以便執行原有功能 4.具體裝飾 具體擴充套件的功能在這裡 三 例子 使用裝飾模式來演示乙...
java與模式 裝飾模式 decorator
裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。裝飾模式應該在以下情況下使用 需要擴充套件乙個類的功能,或給乙個類增加附加責任。需要動態地給乙個物件增加功能,這些功能可以再動態地撤銷。需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關係變的不現實。如圖 應...