我在swift中使用单元测试时很新,当我尝试创建用于测量性能的单元测试时,我遇到了错误。
这是我的测试用例的代码。
func testPerformaceFetchSearchResult(){
//let ICD9ViewController = ICD9Controller() //this is not working since i need the IBOutlet also
var ICD9ViewController:ICD9Controller!
let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle:NSBundle(forClass: self.dynamicType))
ICD9ViewController = storyboard.instantiateViewControllerWithIdentifier("ICD9Controller") as! ICD9Controller
ICD9ViewController.beginAppearanceTransition(true, animated: false)
ICD9ViewController.code = "0"
ICD9ViewController.name = ""
ICD9ViewController.desc = ""
ICD9ViewController.sortBy = 1
ICD9ViewController.customPage.pageNo = 1
ICD9ViewController.customPage.pageSize = 10
self.measureBlock(){
ICD9ViewController.fetchSearchResult()
}
}
错误在此行
ICD9ViewController = storyboard.instantiateViewControllerWithIdentifier("ICD9Controller") as! ICD9Controller
错误信息是
无法将类型' appName .ICD9Controller'(地址)的值转换为' appName .ICD9Controller'( differentAddress < / em>的)
我已经阅读了几个关于XCTestCase的问题,并且大多数错误都无法将_appName_.viewController
类型的值转换为_appNameTests_.viewController
,这对我来说并非如此,因为我已经检查了我的目标成员资格故事板和我的控制器。
我的问题是,如何从故事板中实例化视图控制器以进行单元测试?
答案 0 :(得分:1)
视图控制器和故事板应仅在应用程序目标上可用,然后您可以使用@testable
在测试中访问它。
检查此post是否对您有所帮助。另外,如果这不起作用,请尝试使用NSBundle.mainBundle()
代替测试包。
答案 1 :(得分:1)
经过两天的挣扎,我终于找到了根本问题。
问题是强制转换问题,在我的案例中有两个名称相同的模块 appName 。这使得xCode感到困惑,这就是它无法转换视图控制器的原因。
由于模块名称通常以产品名称为源,我更改了测试产品名称,最终解决了我的问题。