1

我正在编写 Cocos2d 应用程序并寻找一种编写功能测试的方法。

我真正需要的是在模拟器上启动应用程序并检查我的场景是否包含特定节点。像这样的东西

@implementation MenuTest

- (void) setUp
{
    // Launch app on the simulator
}

- (void) tearDown
{
    // Shut simulator down
}

- (void) testMenuContainsExitItem
{
    CCScene *scene = [[CCDirector sharedDirector] runningScene];
    CCNode *exit = [scene getChildByTag:EXIT_ITEM];

    STAssertNotNil(exit, @"No exit item found");
}

@end

那么,有没有办法在正在运行的应用程序上执行测试?

4

2 回答 2

0

您在 setup 方法中创建和设置场景,然后使用 test* 方法检查场景是否按照规范设置。

请务必在设置中使用您也从游戏代码中调用的函数。就像是:

-(void) setup
{
    CCScene* scene = [FirstScene setup];
    [[CCDirector sharedDirector] runWithScene:scene];
}

然后执行测试:

- (void) testMenuContainsExitItem
{
    CCScene* scene = [CCDirector sharedDirector].runningScene;
    CCNode *exit = [scene getChildByTag:EXIT_ITEM];

    STAssertNotNil(exit, @"No exit item found");
}

您不需要也不应该在场景代码中添加任何 OCUnit 测试代码(即 STAssert*)。因为如果没有 OCUnit,您的场景将无法在常规构建中编译。

于 2012-10-25T13:51:13.100 回答
-1

您可以为应用程序中的所有 CCNode 定义不同的标签。例如在接口部分添加类似的东西:

#define kExitNodeTag = 400;

初始化时:

-(id)init {
    if(self=[super init]) {
         ...
         self.tag = kExitNoteTag;
         ...
    }
}

您可以在每个 CCScene 中初始化后检查节点是否存在:

-(void)onEnter {
    CCNode *exit = [scene getChildByTag:kExitNodeTag];
    STAssertNotNil(exit, @"No exit item found");
}
于 2012-10-25T11:04:13.580 回答