Я относительно новичок в 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]);
}
В журнале отображаются совпадающие целочисленные значения как для ViewPages, так и для 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 всегда равно нулю? В результате тест провален.
Я также попытался использовать функцию, которая загружает массив ViewPages в контроллер, с локальной функцией в тестовом контроллере, которая возвращает предварительно определенный массив, т.е.
[[[mock stub] andCall:@selector(createMockPageViews) onObject:self] loadPageViews];
Однако это имело точно такой же результат, как и выше. Тест по-прежнему терпит неудачу, потому что numberOfPages возвращает 0, в то время как массив visiblePages показывает ожидаемое количество.
Как я уже сказал, я новичок в OCUnit и OCMock, поэтому я надеюсь, что этот вопрос будет максимально подробным и имеет смысл. Я надеюсь, что это связано с моим непониманием того, как работает OCMock, и кто-то может меня исправить - я буду бесконечно благодарен! Кажется, что на OCUnit и OCMock для разработки iPhone действительно не хватает достойной документации для начинающих, к сожалению, и эта небольшая проблема сводит меня с ума уже два дня...
заранее спасибо
mock
, но вы все еще работаете на своемcontroller
, это два разных объекта. - person Paul.s   schedule 12.12.2011[mock viewDidLoad]; NSLog(@"%d", [[mock pageControl] numberOfPages]); NSLog(@"%d", [[mock chefs] count]);
Действительно запутался в этом и ценю любую помощь - person Shane Henderson   schedule 12.12.2011