美文网首页
Cocos2D-X cpp-tests 学习笔记 1

Cocos2D-X cpp-tests 学习笔记 1

作者: 贾佳菊 | 来源:发表于2015-08-27 00:23 被阅读313次

    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 的测试了。

    相关文章

      网友评论

          本文标题:Cocos2D-X cpp-tests 学习笔记 1

          本文链接:https://www.haomeiwen.com/subject/dbyhcttx.html