我对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]);' 真的很困惑这个,并感谢任何帮助 –