В общем, если вы застряли с проблемой окружающей среды, когда безусловное тестирование кажется невозможным, вы можете обойти это, если преимущества достаточно велики, чтобы оправдать ваши прыжки через некоторые обручи.
Ситуация здесь представляет собой особый случай нежелательных внешних зависимостей, которые я обычно решаю в своих модульных тестах, либо #ifdefing из крошечных битов зависимого кода, либо путем реализации классов-заглушек для заполнения ожидаемых ролей зависимостей настолько, чтобы мой код мог быть проверенным.
Таким образом, в этом конкретном случае вы можете создать новый исходный файл, связанный только в тестовом комплекте, с именем «UIKitStubClasses.m»… внутри него вы можете реализовать все необходимое для моделирования зависимых от UIKit классов, таких как UIViewController, чтобы ваши тесты связывают и тщательно прорабатывают собственную логику.
Важно помнить, что обычно это не так уж много работы. Тесты позволят вам узнать, что вам нужно реализовать в заглушке, например, путем выдачи исключений о невыполненных методах. Вы просто добавляете то, что вам нужно, чтобы скрыть ошибки и тестировать свой код, и тогда ваш класс-заглушка будет достаточным для тестирования , как любой из допустимых системных классов инфраструктуры.