我创建了UICollectionViewController
的子类并将其命名为LibraryCollectionViewController
,并标记了项目和测试的两个复选框。它的故事板ID也是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个复选框,我启用了它们,这可能是原因?
答案 0 :(得分:8)
我的问题是我从单元测试中引用了NSBundle.mainBundle()
,而我需要使用:
let bundle = NSBundle(forClass: self.classForCoder)
答案 1 :(得分:5)
如果一个类是两个目标(可能是两个框架?)的成员,就会发生这种情况 - 而且你的应用程序以某种方式引用一个框架,而单元测试目标引用第二个目标。
因此,其中一个编译的文物具有完全限定类型Framework1.MyClass
而另一个是Framework2.MyClass
- 并且它们在运行时不同类因为它们具有不同的命名空间。 (即使这两个类都是从同一个Swift源文件编译的)
答案 2 :(得分:0)
试试这个:
LibraryCollectionViewController.swift
MyApp
答案 3 :(得分:0)
您不能同时检查视图控制器的两个目标。您必须仅启用视图控制器的项目目标。您必须在测试用例文件中导入类模块,如@testable import myprojectname,而不是同时启用两个目标。
答案 4 :(得分:0)
我遇到了同样的问题,因为我正在使用导航控制器 试试这个:
删除嵌入式导航控制器
直接绑定这两个视图控制器
我希望它能起作用
答案 5 :(得分:-2)
我有同样的问题。你需要: