【问题标题】:XIB outlets unit testingXIB网点单元测试
【发布时间】:2013-06-27 15:00:36
【问题描述】:

我有以下代码来测试视图是否正确配置(其中,我将monthScrollview 放置为视图的子视图:

@implementation ECBrowserViewControllerTests
-(void)setUp
{
  //-deviceSpecific simply adds suffix like '_iPad'
  main=[[ECBrowserViewController alloc] initWithNibName:[@"ECBrowserViewController" deviceSpecific] bundle:nil];
}
-(void)testOutlets
{
    STAssertNotNil(main.view, @"View outlet not set!");

    STAssertNotNil(main.monthScrollView, @"no month scrollview");
    STAssertTrue(main.monthScrollView.pagingEnabled, @"Paging should be enabled");
}

-(void)testPaging
{
    STAssertNotNil(main.monthScrollView, @"no month scrollview");
    STAssertTrue(main.monthScrollView.pagingEnabled, @"Paging should be enabled");
}
@end

谁能告诉我为什么testPaging 失败,而testOutlets 成功?我发现这是先检查 parentView,但为什么呢?

我正在使用 Xcode 4.6.3 和内置 SenTestingKit

【问题讨论】:

  • 冒着提出愚蠢问题的风险,monthScrollView 已连接到它的插座,是吗?
  • 是的。 testOutlets 通过。

标签: objective-c xcode unit-testing xib ocunit


【解决方案1】:

它只是失败了,因为在 COCOA 中 ViewController 的视图是延迟加载的view 属性只有在需要时才会设置,即第一次尝试获取其值时。在那一刻,loadView 被召唤了。

testPaging 测试失败的原因是 viewController 的视图从未被获取。

因此,在您的特定测试中,您必须在视图控制器上显式调用 -view 才能调用其 -loadView 方法/回调,从而分配其视图(和子视图)。

【讨论】:

  • 很棒的答案!您是否有说明视图是延迟加载的参考资料?
  • 谢谢,我记得在 Apple 的有关视图控制器的文档或某些书籍上阅读过它(不幸的是,我不记得是哪一本了)。无论如何,通过编写一些代码和运行一些测试来证明视图控制器的视图延迟加载是很容易的。
【解决方案2】:

试试这个:

-(void)testPaging
{
    [main view];    // Force nib to load

    STAssertNotNil(main.monthScrollView, @"no month scrollview");
    STAssertTrue(main.monthScrollView.pagingEnabled, @"Paging should be enabled");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2023-04-10
    • 2013-07-24
    • 1970-01-01
    • 2015-04-18
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多