首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cedar测试iOS控制器

使用Cedar测试iOS控制器
EN

Stack Overflow用户
提问于 2013-01-23 03:24:54
回答 2查看 574关注 0票数 0

我正在尝试用Cedar测试一个控制器,但是我真的不明白为什么它不能工作。控制器永远不会显示,viewDidLoad或viewDidAppear永远不会被调用。这是不是Cedar不该做的事情,还是我的错误?

代码语言:javascript
复制
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);
    });
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-25 08:07:32

单元测试同步运行。任何动画的东西都不会在普通的单元测试中工作,因为测试将在更改发生之前完成。

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

代码语言:javascript
复制
[model loadViewIfNeeded];

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

我没有使用Cedar,但我有一个基于OCUnit的视图控制器测试驱动开发截屏视频:How to Do UIViewController TDD

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

票数 4
EN

Stack Overflow用户

发布于 2017-01-18 05:21:34

我通常使用如下设置隔离测试我的视图控制器:

代码语言:javascript
复制
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;
}];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14466407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档