Создание проекта, который использует Cedar для тестов, Objective-C Realm и тестирует быстрые модели Realm
Я надеюсь, что этот вопрос увидит и на него ответит кто-то из команды Realm
У меня есть проект, который использует Cedar для написания тестов в стиле BDD. У меня есть смешанный проект с файлами Objective C и Swift. Некоторые из этих быстрых файлов предназначены для пользовательских моделей Realm. Я использую CocoaPods для установки Realm в мой проект.
Рекомендованные настройки, которые я видел до сих пор:
- использование
Realm/Headers
в подфиле для тестовых целей и простоRealm
для основной цели - это решает+[RLMObjectBase ignoredProperties]: unrecognized selector sent to class
ошибка.
Мое приложение собирается и запускается, но теперь я получаю это RLMObject subclasses with the same name cannot be included twice in the same target
Если я удаляю объекты swift из всех моих тестовых целей и оставляю их только на главном объекте, теперь я не могу видеть их в тестовых файлах, что приводит меня к следующему пункту
- Используйте @testable в ваших файлах swift. Это хороший совет, если вы тестируете с быстрым классом XCTest, но он не работает с Cedar (или я не знаю, как заставить его работать)
Так что мой вопрос был бы, есть ли способ заставить эту настройку работать? Каковы будут точные шаги?
1 ответ
В ожидании ответа мне удалось найти ответ в блоге этого прекрасного джентльмена:)
- Убедитесь, что все ваши файлы.swift имеют целевое членство, установленное только для вашей основной цели
- Как я уже упоминал в вопросе, в вашем Podfile добавить
Realm
для основной цели иRealm/Headers
в ваших тестовых целях - Убедитесь, что все ваши тестовые объекты имеют
Build Settings -> Product Module Name
установить то же значение, что и в главной цели - Последний и отсутствующий шаг в моем случае, добавьте следующий путь
$(CONFIGURATION_TEMP_DIR)/YourMainTargetName.build/DerivedSources
в ваших тестовых целяхBuild Settings -> Header Search Paths
Сделайте последний шаг для каждой цели тестирования, если у вас есть несколько, и для каждой конфигурации сборки (например, Alpha, Beta, Release), если у вас есть несколько.
Это также дает нам приятное преимущество удаления членства swift-классов из наших целей тестирования (как и для наших классов Objective-C).
Теперь ваши тесты должны выполняться, а Realm не должен выдавать вам исключения.