Я относительно новичок в OCUnit и OCMock, поэтому, пожалуйста, потерпите меня. У меня есть контроллер представления, который содержит UIPageControl, где количество страниц рассчитывается из подсчета NSArray (который заполняется из базовых данных). Это делается в методе ViewDidLoad следующим образом:
- (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]);
}
В журнале отображаются совпадающие целочисленные значения и для viewsPages, и для 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 показывает, что количество просматриваемых страниц соответствует количеству созданного мною массива (отлично!), Но numberOfPages всегда равно нулю? В результате тест не пройден.
Я также попытался переключить функцию, которая загружает массив visiblePages в контроллер, с локальной функцией в тестовом контроллере, которая возвращает предопределенный массив, т.е.
[[[mock stub] andCall:@selector(createMockPageViews) onObject:self] loadPageViews];
Однако это имело точно такой же результат, как и выше. Тест по-прежнему не проходит, потому что numberOfPages возвращает 0, в то время как массив просматриваемых страниц показывает ожидаемое количество.
Как я уже сказал, я новичок в OCUnit и OCMock, поэтому я надеюсь, что этот вопрос настолько подробен, насколько это возможно, и имеет смысл. Я надеюсь, что это связано с недоразумением с моей стороны о том, как работает OCMock, и кто-то может исправить меня - я буду вечно благодарен! Похоже, что для начинающих учиться не хватает приличной документации по OCUnit и OCMock для разработки на iPhone, и эта маленькая проблема сводит меня с ума уже два дня ...
Заранее спасибо