Cocos2D-X cpp-tests 学习笔记 1

TestController

TestController 的构造方法中完成了以下几件事:

  1. 列表初始化几个成员变量;
  2. 初始化了 _rootTestList 这是一个 RootTests,并调用 runThisTest() 方法;
  3. 初始化了一个手机监听器。

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

tests/cpp-tests/Classes/BaseTest.h

中定义了以下几个名字里边含有 “Test” 的类,比较容易混淆。

TestBase TestList RootTest(RootTest 在 controller 中定义)

在 TestController 的构造方法中,RootTests 对象调用了 runThisTest() 方法,这个方法是继承自 TestList 的,而 TestList 的该方法又继承于 TestBase ,其中,TestBase 的方法声明为:

virtual void runThisTest() {}

关键字 virtual 代表这个方法被期望于子类实现, TestList 的该方法声明为:

virtual void runThisTest() override;

关键字 override 代表这个方法重写了父类的虚函数。

看一下这个方法的实现:

  1. 首先,实例化了一个 TestCustomTableView ,看它的定义,发现在 create 方法中传入了这个 TableView 的数据源,即 TestList 。实例化这个 TableView 之后又设置了它的委托,也是 TestList 。再看 TestList 类的声明:

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

同时继承了三个类,其中包括 TableView 的数据源和委托,TestList 也声明了数据源和委托方法,并加入关键字 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. 查看这几个数据源和委托方法,TableView 使用了 _ChildTestName 和 _testCallbacks ,两个私有数组,而这两个私有数组是在方法 addTest 中填充的。在 RootTests 的构造函数中,addTest 方法被不断调用填充了测试项,并且使用 Lambda 加入了每个测试项的回调函数,这样,我们就看到了在 test-cpp 项目启动之后的那个测试项的表。每个 Lambda 都返回了一个 TestBase 的子类,这个类是通过“继承链”TestBase,TestSuite 继承的 TestBase 。

TestSuite

TestSuite 和 TestList 类似,定义在

tests/cpp-tests/Classes/BaseTest.h

中,并且同样继承于 TestBase 。它与 TestList 的区别通过 “List” 和 “Suite” 能够看出来,TestSuite 代表了一组相似的 test ,而 TestList 是一个 test 表。而且 TestSuite 也没有使用 TableView 来显示自己的测试项,而是通过三个虚函数来实现各个测试项之间的切换:

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

从 TestBase 继承的 _childTestName 属性和自己的 _testCallbacks 也储存了它的各个测试项名称及回调。

它也实现了 runThisTest() 方法,在这个方法中将自己的第一个测试项场景加入到了导演中。

同时定义并实现了 addTestCase() 方法,用来加入自己的测试项,它的每个测试项都是一个继承自 TestCase 的对象,而 TestCase 继承自 Scene ,即它的每个测试项都是一个场景。

TestCase

TestCase 就是 TestSuite 中每个测试项。
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;

通过成员变量的名字容易猜到这些变量的用途。
接下来我们只要关注那些继承了 TestCase 的子类的实现,那里边就是 Cocos2D-X 中各种 API 的测试了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 前言 我选择开发一个游戏有很多原因。我觉得自己是“核心”玩家,过去的大部分时间我都花在玩游戏,自己制作、阅读和游戏...
    月影檀香阅读 11,865评论 1 27
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,617评论 18 399
  • 三更入榻五更天,夜遁楼空人未眠。雾抱独峰难化险,茶凉墨干念楼兰。图片发自简书App
    昊水长天阅读 236评论 0 3
  • 要是没有鞠婧祎, 昨晚的《快本》 纵有霍建华、张艺兴、潘玮柏撑场, 也算无聊。 鞠婧祎登上了微博“热搜”, 有粉丝...
    辣八阅读 1,493评论 2 5