9 Mart 2021
Updated on 23 Temmuz 2024
UIViewController Unit Test Cast Hatası
article cover

UIViewController dosyalarını unit test yazarken test targeti ile normal targetiniz arasında bir karmaşa yaşanabiliyor, burada ilk bakılması gereken şey, doğru target @testable import TARGETADI yani modulu import etmeniz gerekiyor. Eğer bundan kaynaklı değilse ve aşağıdaki gibi storyboardı çağırıyorsanız burada bir yanlış yapıyorsunuz demektir.

swift
func view<T: UIViewController>(controllerClass: T.Type) -> T {
let storyboardID = (controllerClass as UIViewController.Type).storyboardID
let scene = UIStoryboard(name: self.rawValue, bundle: Bundle.main).instantiateViewController(withIdentifier: storyboardID) as! T
return scene
}

aşağıdaki gibi Bundle'ı oluştururken classınızla birlikte çağırmanız gerekiyor.

swift
func view<T: UIViewController>(controllerClass: T.Type) -> T {
let storyboardID = (controllerClass as UIViewController.Type).storyboardID
let scene = UIStoryboard(name: self.rawValue, bundle: Bundle(for: controllerClass)).instantiateViewController(withIdentifier: storyboardID) as! T
return scene
}

yani bundle'a nil veya Bundle.main olarak değil Bundle constructor parametresine class type'ını iletmeniz gerekmektedir.

Subscribe to the newsletter
Get emails from me about web development, tech, and early access to new articles.
Be the first to know when the blog is published
;