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