У меня были модульные тесты в моем проекте в течение пары недель, и они до сих пор работали нормально.
Один из моих новых модульных тестов создает один из моих пользовательских контроллеров представления.Указанный контроллер представления создает и добавляет подпредставление типа CoolSearchBar
, класса, который я создал сам (как файл .swift, так и файл .xib).
В указанном контроллере представления я загружаю этот экземпляр CoolSearchBar
программно, перед добавлением его в иерархию представлений, например:
guard let searchBar = Bundle.main.loadNibNamed(String(describing: CoolSearchBar.self), owner: nil, options: nil)?.first as? CoolSearchBar else {
fatalError("Search bar could not be loaded from nib")
}
Когда я запускаю приложение в обычном режиме, эта проверка проходит, и остальная часть кода продолжает выполняться.
Однако,когда я запускаю свои модульные тесты, появляется фатальная ошибка в приведенном выше коде.Я немного покопался и обнаружил, что причина ошибки заключается в том, что одно имя класса (CoolSearchBar
) не рассказывает всей истории.
В частности, я использовал NSStringFromClass
, чтобы получить более подробныйописания классов объектов, которые я сравниваю.По сути, создаваемый xib оценивается по типу класса:
MyApp.CoolSearchBar
Но класс, с которым проверяется (часть as? CoolSearchBar
), оценивает:
MyAppTests.CoolSearchBar
Кто-нибудь знает, почему имена модулей различаются по классам?Как я могу заставить эти два, казалось бы, идентичных класса оценивать одну и ту же вещь, чтобы мои модульные тесты снова проходили?
Спасибо, и, пожалуйста, прокомментируйте, если вам нужна дополнительная информация.