2014-11-04 1 views
0

У меня есть три класса: ClassA, ClassB и ClassC.NSObject + (BOOL) isSubclassOfClass: метод возвращает неверный результат

ClassC наследует ClassB, который наследует ClassA.

Я пытаюсь написать модульный тест, чтобы убедиться, что ClassC наследует от ClassB:

XCTAssertTrue([ClassC isSubclassOfClass:[ClassB class]]); 

это возвращает ложь.

XCTAssertTrue([ClassC isSubclassOfClass:[ClassA class]]); 

возвращает true.

[ClassC class] superclass] 

возврат ClassB.

Обратите внимание, что при тестировании [ClassC isSubclassOfClass:[ClassB class]] в консоли он возвращает true, даже когда я проверяю это непосредственно перед тем, как код в моем модульном тесте возвращает false для того же теста!

Может ли кто-нибудь объяснить, как это может произойти?


Я попробовал предложение Брайана из комментариев. Вход из моего модульного тестирования я получаю:

0x102a8c4e0 0x110d21820

Logging из консоли я получаю:

0x102a8c4e0 0x102a8c4e0

+1

Вы прочитали эту тему? http://stackoverflow.com/questions/19883472/objc-nsobject-issubclassofclass-gives-incorrect-failure – Priyatham51

+0

Это похоже на ту же проблему, но у меня нет никаких моих классов в статических библиотеках. – Darren

+1

'NSLog (@"% p% p ", [Класс суперкласса ClassC], [ClassB class])' посмотреть, отличаются ли они –

ответ

2

Это, скорее всего, у вас есть некоторые из классы, добавленные как к цели вашего приложения, так и к целевой тестовой единице.

Ваш класс должен быть добавлен только к целевой теме приложения.

От вашего редактирования, похоже, что это ClassB, это ошибка, но стоит проверить все три из них.

SenTest/XCTest использует тестовую проводку, которая позволяет классам, включенным в приложение, проверять, без необходимости явно включать их реализацию.

В том числе оба предоставили вам дубликаты классов, поэтому у них разные адреса памяти.

+0

Спасибо за предложение, я не вижу, где ClassB будет добавлен в тестовую цель, хотя - в виджетах целевого членства инспектора проверяется только цель приложения, и она отсутствует в списке «Источники компиляции» на этапах сборки для цель. То же самое касается других классов. – Darren

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

  • Нет связанных вопросов^_^