Итак, я обнаружил, что при написании XCTests или тестов пользовательского интерфейса я не могу получить доступ к MOC делегата моего приложения. Я получил какую-то ошибку, в которой говорилось: «Я MyAppUITests, и я не могу получить доступ к материалам MyApp».
Круто, нет проблем, я написал весь свой код, чтобы принять любой MOC, а затем сделал фиктивный MOC в setup(), чтобы у каждого XCTest был свежий планшет, который не касался моих реальных данных. Импортируйте мое приложение как тестируемое. Бум, все работает, мне не нужно менять цели или писать какой-либо код в моих объектах, чтобы «заставить его работать для тестирования!»
Проблема в том, что я не уверен, как это сделать для тестов пользовательского интерфейса и раскадровок. Большинство моих контроллеров представления получают мой MOC от appdelegate в viewdidload. Я не могу понять, как сказать ему использовать фиктивный макет, чтобы каждый тест мог начинаться с чистого листа и чтобы он не использовал мое фактическое основное хранилище данных, а затем мог нормально работать, когда не тестировался. Цель здесь состоит в том, чтобы основной код приложения не имел никаких ссылок на него, зная, что он тестируется.
Должен быть чистый способ сделать это без уродства, смены целей и т. д. Что-то, что будет работать так же, как мои XCTests, но для пользовательского интерфейса. Я нашел это: Как начать с пустых основных данных для каждого утверждения теста пользовательского интерфейса в Swift?, но никто не ответил. Этот пользователь задает аналогичный вопрос, но, я думаю, у него неправильный подход (очистка основных данных вместо использования имитации MOC).
Идеи?
Что бы это ни стоило, я создаю приложение для Mac.