Один из моих модульных тестов терпит неудачу и по какой-то причине я не ожидал. Кажется, что вызов isKindOfClass
возвращает NO, но когда я отлаживаю и перешагиваю, кажется, нет причин, по которым это было бы.
Код:
if ([self.detailItem isKindOfClass:[MovieInfo class]]) {
[self configureViewForMovie];
}
Я прошел через код и сделал:
po self.detailItem
который отображает:
(id) $1 = 0x0ea8f390 <MovieInfo: 0xea8f390>
Итак, что мне не хватает, почему оператор if возвращает false в этом случае?
EDIT:
Вот настройка для элемента DetailItem:
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
NSLog(@"%@", [newDetailItem class]);
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
if (self.masterPopoverController != nil) {
[self.masterPopoverController dismissPopoverAnimated:YES];
}
}
Код шаблона из шаблона мастера.
unit test создает MovieInfo в setUp:
movie = [[MovieInfo alloc] initWithMovieName:@"Movie" movieID:1];
и устанавливает его в тесте
controller.detailItem = movie;
Кроме того, я добавил утверждение параметра в setDetailItem
:
NSParameterAssert([newDetailItem isKindOfClass:[MovieInfo class]] || [newDetailItem isKindOfClass:[PersonInfo class]] || newDetailItem == nil);
Это утверждение также не работает.
Я поставил два оператора журнала над вызовом подтверждения:
NSLog(@"%@", [newDetailItem class]);
NSLog(@"%@", newDetailItem);
которые отображают:
2012-08-28 08:31:37.574 Popcorn[8006:c07] MovieInfo
2012-08-28 08:31:38.253 Popcorn[8006:c07] <MovieInfo: 0x6daac50>
ОДИН БОЛЬШЕ РЕДАКТИРОВАНИЯ:
Я добавил проверку isKindOfClass
перед тем, как установить ее в unit test, которая проходит.
if ([movie isKindOfClass:[MovieInfo class]]) {
NSLog(@"Yep"); //This passes and prints out
}
controller.detailItem = movie; //calls into the setter and fails.