iOS使用Cedar测试控制器

iOS使用Cedar测试控制器,ios,objective-c,testing,ios6,cedar-bdd,Ios,Objective C,Testing,Ios6,Cedar Bdd,我正在尝试用Cedar测试控制器,但无法真正理解为什么它不工作。永远不会显示控制器,也不会调用viewDidLoad或ViewDidAspect。这是雪松不该做的事还是我的错 describe(@"MyController", ^{ __block UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; __block UINavigatio

我正在尝试用Cedar测试控制器,但无法真正理解为什么它不工作。永远不会显示控制器,也不会调用viewDidLoad或ViewDidAspect。这是雪松不该做的事还是我的错

describe(@"MyController", ^{
    __block UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    __block UINavigationController *root = (UINavigationController *)[[[[UIApplication sharedApplication] delegate]window ]rootViewController];
    __block MyViewController *model = [storyboard instantiateViewControllerWithIdentifier:@"MyController"];

    [root pushViewController:model animated:YES];

    it(@"should test something", ^{
        expect(model.content).to(be_truthy);
    });
});

单元测试同步运行。在正常的单元测试中,任何动画化或可以动画化的东西都不起作用,因为测试将在更改发生之前完成

显示视图控制器时,您似乎正在尝试测试其状态。在这种情况下,我们所做的不是推送它,而是加载它:

[model loadViewIfNeeded];
这将从故事板加载视图,然后调用其
-viewDidLoad
。然后您应该能够测试它的状态

我不使用Cedar,但我有一个基于OCUnit的视图控制器测试驱动开发的屏幕广播:


(“model”对控制器来说是一个非常容易混淆的名字。)

单元测试是同步运行的。在正常的单元测试中,任何动画化或可以动画化的东西都不起作用,因为测试将在更改发生之前完成

显示视图控制器时,您似乎正在尝试测试其状态。在这种情况下,我们所做的不是推送它,而是加载它:

[model loadViewIfNeeded];
这将从故事板加载视图,然后调用其
-viewDidLoad
。然后您应该能够测试它的状态

我不使用Cedar,但我有一个基于OCUnit的视图控制器测试驱动开发的屏幕广播:


(“model”对控制器来说是一个非常容易混淆的名称。)

我通常使用如下设置单独测试视图控制器:

beforeEach(^{
            window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
            storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
            subject = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerName"];
            window.rootViewController = subject;
            [window makeKeyAndVisible];
            subject.view should_not be_nil;
}];

我通常使用如下设置单独测试视图控制器:

beforeEach(^{
            window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
            storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
            subject = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerName"];
            window.rootViewController = subject;
            [window makeKeyAndVisible];
            subject.view should_not be_nil;
}];

模型名称来自Cedar(为测试创建模板),但我同意。我稍后会试试这个。谢谢。我的VC测试有问题!谢谢“model”是默认名称,用于替换为正在测试的实际对象。model名称来自Cedar(为测试创建模板),但我同意。我稍后会试试这个。谢谢。我的VC测试有问题!谢谢名称“model”是默认值,用于替换为正在测试的实际对象。