我對OCUnit和OCMock相對較新,請耐心等待。我有一個視圖控制器,它包含一個UIPageControl,其中頁數是從NSArray(從核心數據填充的)的計數中計算出來的。這在viewDidLoad方法如下進行:OCUnit應用程序測試:試圖測試UIPageControl numberOfPages == NSArray count
- (void)ViewDidLoad {
[super viewDidLoad];
... other code ...
self.pageControl.numberOfPages = [self.viewedPages count];
self.pageControl.currentPage = 0;
NSLog(@"%d", controller.pageControl.numberOfPages);
NSLog(@"%d", [controller.viewedPages count]);
}
日誌顯示用於兩個viewedPages和numberOfPages匹配整數值,幸運如果我運行下面測試斷言爲真:
- (void)testPageControl {
[controller viewDidLoad];
STAssertTrue(controller.pageControl.numberOfPages == [controller.viewedPages count], @"...");
}
然而,如前所述,這個過程依賴於使用Core Data中的對象的數組,所以我決定嘗試使用OCMock來取代預先定義的數組,以便有效地刪除Core Data元素。這樣做,我現在得到的結果我不明白。
這是我的新的考驗是什麼樣子:(!偉大的)
- (void)testPageControl {
id mock = [OCMockObject partialMockForObject:controller];
NSArray *mockPagesArray = [NSArray alloc] initWithObjects:...];
[[[mock stub] andReturn:mockPagesArray] viewedPages];
[controller viewDidLoad];
NSLog(@"%d", [controller.pageControl numberOfPages]);
NSLog(@"%d", [controller.viewedPages count]);
STAssertTrue(controller.pageControl.numberOfPages == [controller.viewedPages count], @"...");
[mockPagesArray release];
}
什麼是困惑我的是,在這個場景中的NSLog表明viewedPages數相匹配,我創建模擬陣列的計數,但numberOfPages始終爲零?結果,測試失敗。
我還試圖混寫它加載在控制器中的viewedPages陣列的功能,與在測試控制器的本地函數返回一個預先定義的陣列,即,
[[[mock stub] andCall:@selector(createMockPageViews) onObject:self] loadPageViews];
然而,這有完全相同的與上面相同的結果。測試仍然失敗,因爲numberOfPages返回0,而ViewedPages數組顯示預期的計數。正如我所說,我是OCUnit和OCMock的新手,所以我希望這個問題儘可能詳細和有意義。我希望這是我的誤解,關於OCMock如何工作,哪些人可以糾正我 - 我會永遠感激!在OCUnit和OCMock for iPhone開發中,似乎真的缺乏體面的文檔,對於初學者來說不幸的是,這個小問題已經讓我生氣了兩天了...
先謝謝您
你已經做了你的控制器的模擬中'mock',但你在你的'controller'仍在運行,他們是兩個不同的對象。 –
謝謝保羅。我仍然有點困惑,希望你能詳細說明,因爲如果它們是兩個不同的對象,我不明白爲什麼控制器的ViewedPages count匹配我爲Mock對象設置的(新)計數?沒有創建模擬,我有兩個記錄。當我嘲笑對象並調整loadViewedPages方法時,控制器和模擬都會顯示三條記錄,如果它們是不同的對象,會令我感到意外。再次,這肯定會降低到我的誤解,我發現的文檔沒有幫助我。乾杯! –
我剛剛試過以下,但結果仍然相同 '[mock viewDidLoad]; NSLog(@「%d」,[[mock pageControl] numberOfPages]); NSLog(@「%d」,[[mock chefs] count]);' 真的很困惑這個,並感謝任何幫助 –