Хотел в новом проекте под ios сделать все кошерно -- отделить логику от гуя, обложить логику юнит-тестами. Ага, щаз.
Вынес логику как статическую либу -- потерялись некоторые методы. Проект компилируется без ошибок, а в рантайме падает - Unrecognized Selector. Как оказалось, без флага -ObjC линкер не подтягивает категории (аналог extension methods из C#) из статических библиотек. Благо сотрудник уже с таким сталкивался, подсказал.
Начал пилить тесты. Инициализация MagicRecord (библиотека для active record) падает с исключением "URL is nil". Не находит схему данных. Смотрю внутрь бандла теста - лежит. Оказалось, она пытается загрузить схему из ресурсов главного модуля. А для юнит-тестов главным модулем является программа otest из SDK.
Upd. Юнит-тесты поборол. Решение со StackOverflow:
Assuming you have an application target called "MyApp"
Вынес логику как статическую либу -- потерялись некоторые методы. Проект компилируется без ошибок, а в рантайме падает - Unrecognized Selector. Как оказалось, без флага -ObjC линкер не подтягивает категории (аналог extension methods из C#) из статических библиотек. Благо сотрудник уже с таким сталкивался, подсказал.
Начал пилить тесты. Инициализация MagicRecord (библиотека для active record) падает с исключением "URL is nil". Не находит схему данных. Смотрю внутрь бандла теста - лежит. Оказалось, она пытается загрузить схему из ресурсов главного модуля. А для юнит-тестов главным модулем является программа otest из SDK.
Upd. Юнит-тесты поборол. Решение со StackOverflow:
Assuming you have an application target called "MyApp"
- Add a new target of type "other/Cocoa Unit Testing Bundle" to the project e.g "MyAppTesting". Here all Unit test files are located.
- Go to MyAppTesting Build Phases and add MyApp as Target Dependency. This assures that MyApp is build before building the MyAppTesting target.
- Open the Build Settings of MyAppTesting and change
- Bundle Loader: $(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp
- Test host: $(BUNDLE_LOADER)
- Open the Build Settings of MyApp and change
- Symbols Hidden by default: NO (for both)
- Strip debug Symbols during Copy: Debug:NO
Комментариев нет:
Отправить комментарий