Я написал тест OCUnit, который нормально работал в Xcode 3.2, и теперь у меня возникают проблемы с ним в Xcode 4. Он тестирует одну статическую функцию X
в классе A
, которая не вызываетлюбые классы или функции (за исключением библиотечных функций).Единственный другой код, который должен быть вызван, - это статический конструктор, который инициализирует две статические переменные, но, опять же, это жесткие значения (массивы), которые не вызывают никаких других классов, или функции класса A
.
И все же мне пришлось включить файлы .m, .mm и .c для всех классов, которые он импортирует, которые они импортируют и т. Д., Чтобы решить _OBJC_CLASS _ $ _ ClassB ", на который делается ссылкаиз: ошибок. Я не помню, чтобы что-либо из этого делалось в Xcode 3, но хорошо, нет проблем, я получил его для компиляции. Теперь я получаю ошибки, происходящие из класса B
's +[B initialize]
.
Почему статический конструктор вызывается для класса, на который нет ссылок? Как я могу это исправить, в идеале, не изменяя мои классы, чтобы включить тестирование?
Обновление
Чтобы понять, что происходит, я закомментировал все свои тесты и #import "A.h"
, чтобы посмотреть, что произойдет. Я добавил один простой модульный тест:
- (void) testSomething {
STAssertTrue(NO, @"did it work?");
}
Все еще , мой +[B initialize]
вызывается и выходит из строя.Кажется, что OCUnit просматривает все мои классы, и их +initialize
методы вызываются в процессе.Это не имеет смысла для меня - как я могу отключить это поведение?
Вот трассировка стека до вызова моего собственного кода, в случае, если это помогает:
#7 _class_initialize ()
#8 prepareForMethodLookup ()
#9 lookUpMethod ()
#10 objc_msgSend ()
#11 +[NSObject(SenTestRuntimeUtilities) senIsASuperclassOfClass:] ()
#12 +[NSObject(SenTestRuntimeUtilities) senAllSubclasses] ()
#13 +[SenTestSuite updateCache] ()
#14 +[SenTestSuite suiteForBundleCache] ()
#15 +[SenTestSuite testSuiteForBundlePath:] ()
#16 +[SenTestProbe specifiedTestSuite] ()
#17 +[SenTestProbe runTests:] ()
#18 <????> ()
#19 <????> ()
#20 <????> ()
#21 <????> ()