У меня есть метод 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?
Теперь некоторые вопросы -
Что происходит здесь? Являются ли объекты Core Data обработаны по-разному при работе в тестах?
Почему тип объекта «Me_Me_2» при тестировании и «Me_Me_» в противном случае? Почему это не просто «Я»?