Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift单元测试:对象类的模块名称导致类型检查失败_Ios_Swift_Unit Testing - Fatal编程技术网

Ios Swift单元测试:对象类的模块名称导致类型检查失败

Ios Swift单元测试:对象类的模块名称导致类型检查失败,ios,swift,unit-testing,Ios,Swift,Unit Testing,我已经在我的项目中进行了几个星期的单元测试,到目前为止,它们一直工作得很好 我的一个新单元测试实例化了我的一个自定义视图控制器。所述视图控制器实例化并添加类型为CoolSearchBar的子视图,这是我自己创建的类(包括.swift文件和.xib文件) 在所述视图控制器中,我以编程方式加载该CoolSearchBar实例,然后将其添加到视图层次结构中,如下所示: guard let searchBar = Bundle.main.loadNibNamed(String(describing: C

我已经在我的项目中进行了几个星期的单元测试,到目前为止,它们一直工作得很好

我的一个新单元测试实例化了我的一个自定义视图控制器。所述视图控制器实例化并添加类型为
CoolSearchBar
的子视图,这是我自己创建的类(包括.swift文件和.xib文件)

在所述视图控制器中,我以编程方式加载该
CoolSearchBar
实例,然后将其添加到视图层次结构中,如下所示:

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")
}
当我正常运行应用程序时,该检查通过,其余代码继续执行

然而,当我运行单元测试时,上面代码中的致命错误被击中。我做了一些挖掘,发现错误被击中的原因是类名本身(
CoolSearchBar
)并不能说明全部情况

具体地说,我使用了
NSStringFromClass
来获得我正在比较的对象类的更详细的描述。基本上,正在创建的xib评估为类类型:

MyApp.CoolSearchBar

但是被测试的类(as?CoolSearchBar部分)评估为:

MyAppTests.CoolSearchBar

有人知道为什么不同类的模块名称不同吗?我如何才能让这两个看起来完全相同的类计算为相同的值,从而使我的单元测试再次通过


谢谢,如果您需要更多信息,请发表评论。

您可能也在测试目标中添加了CoolSearchBar。从CoolSearchBar的目标成员身份中取消选中测试。 如果要从测试项目上的主应用程序访问类,请通过添加以下内容导入该类:

@testable import myApp

注意:


正如布莱恩·萨切塔所注意到的。一旦某个类从目标成员身份中删除,所有使用该类的其他人都会开始抱怨。因此,添加到测试目标成员资格的主项目中的所有类都必须从该成员资格中删除。

简短回答:您的建议有效!谢谢详细回答:我最初尝试删除
CoolSearchBar
的测试目标成员身份,但它产生了许多其他错误,因此我立即停止了这一途径。在你回答之后,我又重新考虑了这个策略。我基本上需要更改我应用程序中所有文件的目标成员身份(因为它们也有测试目标成员身份),这就完成了。所以,非常感谢!我很高兴能帮助你。没错,一旦你从目标成员中删除了一个类,所有其他使用该类的人都会开始抱怨。所以你需要把它们全部移除。我会更新答案并记下。