Создание проекта, который использует Cedar для тестов, Objective-C Realm и тестирует быстрые модели Realm

Я надеюсь, что этот вопрос увидит и на него ответит кто-то из команды Realm

У меня есть проект, который использует Cedar для написания тестов в стиле BDD. У меня есть смешанный проект с файлами Objective C и Swift. Некоторые из этих быстрых файлов предназначены для пользовательских моделей Realm. Я использую CocoaPods для установки Realm в мой проект.

Рекомендованные настройки, которые я видел до сих пор:

  1. использование 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 из всех моих тестовых целей и оставляю их только на главном объекте, теперь я не могу видеть их в тестовых файлах, что приводит меня к следующему пункту

  1. Используйте @testable в ваших файлах swift. Это хороший совет, если вы тестируете с быстрым классом XCTest, но он не работает с Cedar (или я не знаю, как заставить его работать)

Так что мой вопрос был бы, есть ли способ заставить эту настройку работать? Каковы будут точные шаги?

1 ответ

В ожидании ответа мне удалось найти ответ в блоге этого прекрасного джентльмена:)

  1. Убедитесь, что все ваши файлы.swift имеют целевое членство, установленное только для вашей основной цели
  2. Как я уже упоминал в вопросе, в вашем Podfile добавить Realm для основной цели и Realm/Headers в ваших тестовых целях
  3. Убедитесь, что все ваши тестовые объекты имеют Build Settings -> Product Module Name установить то же значение, что и в главной цели
  4. Последний и отсутствующий шаг в моем случае, добавьте следующий путь $(CONFIGURATION_TEMP_DIR)/YourMainTargetName.build/DerivedSources в ваших тестовых целях Build Settings -> Header Search Paths

Сделайте последний шаг для каждой цели тестирования, если у вас есть несколько, и для каждой конфигурации сборки (например, Alpha, Beta, Release), если у вас есть несколько.

Это также дает нам приятное преимущество удаления членства swift-классов из наших целей тестирования (как и для наших классов Objective-C).

Теперь ваши тесты должны выполняться, а Realm не должен выдавать вам исключения.

Другие вопросы по тегам