ios - Swift 单元测试 : module name of object class causes type check to fail

标签 ios swift unit-testing

我已经在我的项目中进行了几周的单元测试,到目前为止它们一直运行良好。

我的一个新单元测试实例化了我的一个自定义 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

enter image description here

注意:

正如 Brian Sachetta 所注意到的。一旦一个类从目标成员中删除,所有其他使用被删除类的人都会开始提示。因此,主项目中添加到测试目标成员资格的所有类都必须从该成员资格中删除。

关于ios - Swift 单元测试 : module name of object class causes type check to fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765869/

相关文章:

swift - MFMailComposeViewControllerDelegate 未在其他类 swift 4 中被调用

ios - 如何使用带有 swift 的 API 点唱机在应用程序上流式传输音乐?

java - Mockito 测试 void 方法

ios - AVCaptureTorchModeAuto 不会持续更新手电筒模式

ios - List 对象的 SwiftUI 分页

ios - Swift 和 Spawning 对象的评分方法

java - 模拟 Verticle 所依赖的类

ios - systemLayoutSizeFittingSize 没有为我的 UILabel 返回足够大的尺寸

swift - 在 Swift 函数之外访问变量

c++ - 如何使用 google test/mock 测试基于 MFC CWnd 的类?