2013-06-27 66 views
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

+0

在問一個愚蠢的問題的風險,'monthScrollView'連接到其出口,是嗎? – trudyscousin

+0

是的。 'testOutlets'通過。 –

回答

3

它只是失敗,因爲視圖控制器的可可觀點懶洋洋地加載查看屬性沒有設置,直到需要它時,即第一次嘗試獲取其值。那一刻loadView被召喚。

您的testPaging測試失敗的原因是由於viewController的視圖永遠無法獲取。

因此,在您的特定測試中,您必須通過視圖控制器顯式調用-view,以便召喚其-loadView方法/回調並因此分配其視圖(和子視圖)。

+0

真棒回答!你有沒有提到說視圖是懶惰加載的? – Rabiees

+0

謝謝,我記得在Apple的關於視圖控制器的文檔或某些書籍上閱讀它(不幸的是,我不記得哪一本)。無論如何,通過編寫代碼並運行一些測試來證明視圖控制器的視圖是非常容易的。 – HepaKKes

0

試試這個:

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

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