cppunit與裝飾模式

2021-06-04 16:18:00 字數 1234 閱讀 8275

當乙個介面需要重複測試時,就需要考慮將這個重複的次數放到什麼地方了,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

裝飾模式以對客戶端透明的方式擴充套件物件的功能,是繼承關係的乙個替代方案。裝飾模式應該在以下情況下使用 需要擴充套件乙個類的功能,或給乙個類增加附加責任。需要動態地給乙個物件增加功能,這些功能可以再動態地撤銷。需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關係變的不現實。如圖 應...