厦门国际银行网点的单元测试(XIB outlets unit testing)

2019-09-30 06:17发布

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

Answer 1:

因为视图控制器的可可意见延迟加载它只是失败: 视图属性未设置直到它的需要,即当一个人试图在第一时间内获取它的价值。 在那一刻loadView被召唤。

为什么你testPaging测试失败的原因是由于事实的viewController在从未获取视图。

所以,在你特定的测试,你必须明确地调用-view在视图控制器,以便有其-loadView方法/回调传唤,并因此获得其分配的视图(和子视图)。



Answer 2:

尝试这个:

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

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


文章来源: XIB outlets unit testing