Cocos2D-X cpp-tests 學(xué)習(xí)筆記 1

TestController

TestController 的構(gòu)造方法中完成了以下幾件事:

  1. 列表初始化幾個成員變量;
  2. 初始化了 _rootTestList 這是一個 RootTests,并調(diào)用 runThisTest() 方法;
  3. 初始化了一個手機(jī)監(jiān)聽器。

其中, RootTests 的 runThisTest() 方法繼承自 TestList ,TestList 繼承于 TestBase ,而 TestBase 繼承自 Ref 。

tests/cpp-tests/Classes/BaseTest.h

中定義了以下幾個名字里邊含有 “Test” 的類,比較容易混淆。

TestBase TestList RootTest(RootTest 在 controller 中定義)

在 TestController 的構(gòu)造方法中,RootTests 對象調(diào)用了 runThisTest() 方法,這個方法是繼承自 TestList 的,而 TestList 的該方法又繼承于 TestBase ,其中,TestBase 的方法聲明為:

virtual void runThisTest() {}

關(guān)鍵字 virtual 代表這個方法被期望于子類實(shí)現(xiàn), TestList 的該方法聲明為:

virtual void runThisTest() override;

關(guān)鍵字 override 代表這個方法重寫了父類的虛函數(shù)。

看一下這個方法的實(shí)現(xiàn):

  1. 首先,實(shí)例化了一個 TestCustomTableView ,看它的定義,發(fā)現(xiàn)在 create 方法中傳入了這個 TableView 的數(shù)據(jù)源,即 TestList 。實(shí)例化這個 TableView 之后又設(shè)置了它的委托,也是 TestList 。再看 TestList 類的聲明:

    public TestBase, public cocos2d::extension::TableViewDataSource, public cocos2d::extension::TableViewDelegate
    

同時繼承了三個類,其中包括 TableView 的數(shù)據(jù)源和委托,TestList 也聲明了數(shù)據(jù)源和委托方法,并加入關(guān)鍵字 override 代表這些方法繼承自父類。

virtual void tableCellTouched(cocos2d::extension::TableView* table, cocos2d::extension::TableViewCell* cell) override;
virtual cocos2d::extension::TableViewCell* tableCellAtIndex(cocos2d::extension::TableView *table, ssize_t idx) override;
virtual cocos2d::Size tableCellSizeForIndex(cocos2d::extension::TableView *table, ssize_t idx) override;
virtual ssize_t numberOfCellsInTableView(cocos2d::extension::TableView *table) override;

virtual void scrollViewDidScroll(cocos2d::extension::ScrollView* view) override{}
virtual void scrollViewDidZoom(cocos2d::extension::ScrollView* view) override{}
  1. 查看這幾個數(shù)據(jù)源和委托方法,TableView 使用了 _ChildTestName 和 _testCallbacks ,兩個私有數(shù)組,而這兩個私有數(shù)組是在方法 addTest 中填充的。在 RootTests 的構(gòu)造函數(shù)中,addTest 方法被不斷調(diào)用填充了測試項(xiàng),并且使用 Lambda 加入了每個測試項(xiàng)的回調(diào)函數(shù),這樣,我們就看到了在 test-cpp 項(xiàng)目啟動之后的那個測試項(xiàng)的表。每個 Lambda 都返回了一個 TestBase 的子類,這個類是通過“繼承鏈”TestBase,TestSuite 繼承的 TestBase 。

TestSuite

TestSuite 和 TestList 類似,定義在

tests/cpp-tests/Classes/BaseTest.h

中,并且同樣繼承于 TestBase 。它與 TestList 的區(qū)別通過 “List” 和 “Suite” 能夠看出來,TestSuite 代表了一組相似的 test ,而 TestList 是一個 test 表。而且 TestSuite 也沒有使用 TableView 來顯示自己的測試項(xiàng),而是通過三個虛函數(shù)來實(shí)現(xiàn)各個測試項(xiàng)之間的切換:

virtual void restartCurrTest();
virtual void enterNextTest();
virtual void enterPreviousTest(); 

從 TestBase 繼承的 _childTestName 屬性和自己的 _testCallbacks 也儲存了它的各個測試項(xiàng)名稱及回調(diào)。

它也實(shí)現(xiàn)了 runThisTest() 方法,在這個方法中將自己的第一個測試項(xiàng)場景加入到了導(dǎo)演中。

同時定義并實(shí)現(xiàn)了 addTestCase() 方法,用來加入自己的測試項(xiàng),它的每個測試項(xiàng)都是一個繼承自 TestCase 的對象,而 TestCase 繼承自 Scene ,即它的每個測試項(xiàng)都是一個場景。

TestCase

TestCase 就是 TestSuite 中每個測試項(xiàng)。
TestCase 繼承自 Scene 。
我們看它的成員變量:

protected:
cocos2d::MenuItemImage* _priorTestItem;
cocos2d::MenuItemImage* _restartTestItem;
cocos2d::MenuItemImage* _nextTestItem;

cocos2d::Label* _titleLabel;
cocos2d::Label* _subtitleLabel;

private:
TestSuite* _testSuite;
float _runTime;
std::string _testCaseName;

通過成員變量的名字容易猜到這些變量的用途。
接下來我們只要關(guān)注那些繼承了 TestCase 的子類的實(shí)現(xiàn),那里邊就是 Cocos2D-X 中各種 API 的測試了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • 前言 我選擇開發(fā)一個游戲有很多原因。我覺得自己是“核心”玩家,過去的大部分時間我都花在玩游戲,自己制作、閱讀和游戲...
    月影檀香閱讀 12,034評論 1 27
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,759評論 18 399
  • 三更入榻五更天,夜遁樓空人未眠。霧抱獨(dú)峰難化險,茶涼墨干念樓蘭。圖片發(fā)自簡書App
    昊水長天閱讀 244評論 0 3
  • 要是沒有鞠婧祎, 昨晚的《快本》 縱有霍建華、張藝興、潘瑋柏?fù)螆觯?也算無聊。 鞠婧祎登上了微博“熱搜”, 有粉絲...
    辣八閱讀 1,515評論 2 5