Unit Test Swift-casting контроллер просмотра из раскадровки не работает
Я написал приведенный ниже тестовый пример, который отлично справился с быстрым 1.1. Но в 1.2 его нарушение.
class AboutViewController_Tests: XCTestCase
{
//var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType)) // Used in swift 1.1
var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:NSBundle.mainBundle()) // Replaced this in swift 1.2
var aboutViewController:AboutViewController!
override func setUp()
{
super.setUp()
aboutViewController = storyboard.instantiateViewControllerWithIdentifier("AboutViewController") as! AboutViewController
aboutViewController.viewDidLoad()
XCTAssertNotNil(aboutViewController, "About not nil")
}
}
Ошибка при запуске unit test
Невозможно передать значение типа "testProject.AboutViewController" (0x105b0ad30) в "testProjectTests.AboutViewController" (0x116e51d20).
Я сделал достаточно исследований для решения этой проблемы. Но не смог этого сделать. Я надеюсь, что некоторые из вас столкнутся с этой проблемой и смогут мне помочь.
Ответы
Ответ 1
У меня была та же проблема и решение:
- Добавить раскадровку
Main
и AboutViewController
в тестовую цель
- Замените
UIStoryboard(name: "Main", bundle:NSBundle.mainBundle())
на
UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.classForCoder))
Таким образом вы будете загружать раскадровку и инициализировать контроллер из тестового целевого пакета, а не использовать его из основного целевого пакета.
Подробнее просмотрите эту ссылку
Ответ 2
Я столкнулся с той же проблемой несколько минут назад. Вот как я решил это.
- Добавить раскадровку в цель тестирования
- Загрузите контроллер представления следующим образом:
var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:NSBundle(forClass: self.dynamicType))
self.vc = storyboard.instantiateViewControllerWithIdentifier("gettingStartedView") as! MainViewController
self.vc.loadView()
Надеюсь, это поможет!
Ответ 3
Попробуйте это сработало
class VehicleListControllerSpecs: XCTestCase {
var listController: VehicleListController!
override func setUp() {
super.setUp()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "VehicleListController") as! VehicleListController
listController = vc
_ = listController.view
// Put setup code here. This method is called before the invocation of each test method in the class.
}
func testListViewHasTableView() {
XCTAssertNotNil(listController.tableView,"view doesnt has tableview")
}
}