1

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

4

2 回答 2

4

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

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

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

于 2013-06-27T15:35:17.233 回答
0

尝试这个:

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

    STAssertNotNil(main.monthScrollView, @"no month scrollview");
    STAssertTrue(main.monthScrollView.pagingEnabled, @"Paging should be enabled");
}
于 2013-06-29T18:52:27.643 回答