Ответ 1
Моя проблема заключалась в том, что я ссылался на NSBundle.mainBundle()
на модульные тесты, тогда как мне нужно было использовать:
let bundle = NSBundle(forClass: self.classForCoder)
Я создал подкласс UICollectionViewController
и назвал его LibraryCollectionViewController
и пометил оба флажка для проекта и теста. Также это идентификатор раскадровки LibraryCollectionViewController
и устанавливает соответствующий класс в построителе интерфейса.
Являясь новым для Swift и тестирования iOS, я пошел и попытался создать экземпляр указанного контроллера представления в моем тестовом примере следующим образом:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let libraryCollectionVC = storyboard.instantiateViewControllerWithIdentifier("LibraryCollectionViewController") as! LibraryCollectionViewController
И я получаю следующую ошибку:
Could not cast value of type 'MyApp.LibraryCollectionViewController' (0x1010b01f0) to 'MyAppTests.LibraryCollectionViewController' (0x10bd7f580).
Итак, понятно, что это не кастинг, но поскольку я еще не знаком с Swift, я не могу определить, вызвана ли сама ошибка:
as!
Любая помощь будет оценена, спасибо заранее.
Обновление 1:. Когда я создавал контроллер представления, последний шаг показывает 2 флажка под заголовком Target, я включил оба из них, может быть, это и есть причина
Моя проблема заключалась в том, что я ссылался на NSBundle.mainBundle()
на модульные тесты, тогда как мне нужно было использовать:
let bundle = NSBundle(forClass: self.classForCoder)
Попробуйте следующее:
LibraryCollectionViewController.swift
MyApp
У меня была такая же проблема. Вам необходимо:
Вы не должны проверять обе цели для контроллера вида. Вы должны включить только цель проекта для контроллера вида. Вы должны импортировать модуль класса в файл тестового примера, например, @testable импортировать myprojectname вместо включения обеих целей.
Это может произойти, если класс является членом двух целей (возможно, двух фреймворков?) - и ваше приложение каким-то образом ссылается на одну структуру, в то время как цель unit test ссылается на вторую цель.
Таким образом, один из скомпилированных артефактов имеет полностью квалифицированный тип Framework1.MyClass
, а другой - Framework2.MyClass
- и это разные классы во время выполнения, потому что у них разные пространства имен. (Хотя оба класса скомпилированы из одного и того же исходного файла Swift)