2015-05-22 10 views
0

У меня есть метод someMethod. Этот метод в какой-то момент имеет следующее условие if-else.isKindOfClass возвращает разные значения для тестовых случаев

- (void) someMethod { 
    // ... some more code ... 
    if ([userArray[0] isKindOfClass:[Me class]]) { 
     // some code 
    } 
    else { 
     // some other code 
    } 
} 

Теперь это условие if всегда выполняется при нормальном выполнении кода. Но когда я называю это из одного из моих тестовых примеров, вместо этого выполняется выполнение else-part. Я вызываю этот метод точно так же (он не имеет побочных эффектов и т. Д.).

Когда я отлаживал предмет как в обычном режиме, так и при тестировании. Я видел что-то другое.

При работе в тесте userArray имеет 1 объект, (Me_Me_2 *)0x00007fa61d39dbf0. И во время работы в обычном режиме userArray имел тот же объект, но было одно различие. Он сказал (Me_Me_ *)0x00007fce71459ae0.

Когда я печатаю значение NSStringFromClass([userArray[0] class]), они оба печатают «Я».

«Я» - это объект NSManagedObject.

Еще одна интересная вещь: если я добавлю выражение в отладчик и оцениваю его, он всегда будет иметь значение true - ([((NSObject*)userArray[0]) isKindOfClass:[Me class]]) возвращает (bool)true. Это совершенно странно! Если условие истинно, почему оно когда-либо входит в блок else?

Теперь некоторые вопросы -

  1. Что происходит здесь? Являются ли объекты Core Data обработаны по-разному при работе в тестах?

  2. Почему тип объекта «Me_Me_2» при тестировании и «Me_Me_» в противном случае? Почему это не просто «Я»?

ответ

0

Это звучит аналогично следующему вопросу: isKindOfClass doesn't work as expected

Короче говоря, это класс сравниваемых целевой элемент тестовой цели? Он должен быть только целевым участником приложения.

Смежные вопросы