我已经在我的项目中进行了几周的单元测试,到目前为止它们一直运行良好。
我的一个新单元测试实例化了我的一个自定义 View Controller 。所述 View Controller 实例化并添加类型为 CoolSearchBar
的 subview ,这是我自己创建的一个类(.swift 文件和 .xib 文件)。
在上述 View Controller 中,我以编程方式加载了 CoolSearchBar
实例,然后将其添加到 View 层次结构中,如下所示:
guard let searchBar = Bundle.main.loadNibNamed(String(describing: CoolSearchBar.self), owner: nil, options: nil)?.first as? CoolSearchBar else {
fatalError("Search bar could not be loaded from nib")
}
当我正常运行应用程序时,此检查通过,其余代码继续执行。
但是,当我运行单元测试时,上面代码中的 fatal error 被命中。我做了一些挖掘,发现错误被击中的原因是单独的类名 (CoolSearchBar
) 并不能说明全部。
具体来说,我使用 NSStringFromClass
来获取我正在比较的对象的类的更详细的描述。基本上,正在创建的 xib 正在评估类类型:
MyApp.CoolSearchBar
但是被测试的类(as?CoolSearchBar
部分)评估为:
MyAppTests.CoolSearchBar
有谁知道为什么模块名称因类而异?我如何才能让这两个看似相同的类对同一事物进行评估,以便我的单元测试再次通过?
谢谢,如果您需要更多信息,请发表评论。
最佳答案
您可能也将 CoolSearchBar 添加到您的测试目标中。从 CoolSearchBar 的目标成员中取消选中您的测试。 如果你想从你的测试项目的主应用程序访问一个类,通过添加导入它:
@testable import myApp
注意:
正如 Brian Sachetta 所注意到的。一旦一个类从目标成员中删除,所有其他使用被删除类的人都会开始提示。因此,主项目中添加到测试目标成员资格的所有类都必须从该成员资格中删除。
关于ios - Swift 单元测试 : module name of object class causes type check to fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765869/