XIB网点单元测试

时间:2013-06-27 15:00:36

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

我有以下代码来测试是否正确配置了视图(其中,我将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

2 个答案:

答案 0 :(得分:4)

它只是失败,因为在COCOA中ViewController的视图是懒惰地加载 view 属性在需要之前不会设置,即第一次尝试获取其值时。在那一刻loadView被召唤。

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

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

答案 1 :(得分:0)

试试这个:

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

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