无法在快速单元测试中使用 Objective-C 类

Posted

技术标签:

【中文标题】无法在快速单元测试中使用 Objective-C 类【英文标题】:Not able to use objective-C class in swift unit tests 【发布时间】:2018-10-10 07:27:29 【问题描述】:

我想在我的快速测试中使用客观的 C 类。

我的项目最初是在目标 c 中设置的。 我已经为我的项目设置了桥接头。 我在文件的桥接头中已经有了 import 语句,我想在测试中使用它。 测试目标的搜索路径也设置为相同的桥接头,尽管我也尝试使用单独的桥接头。 我使用可可豆荚,所以有一个 xcworkspace 文件。 Pod 文件已包含用于测试的继承搜索路径,尽管我没有在测试中使用 pod 框架。

我在尝试使用该类时收到“使用未声明的类型 'SySearchProductRequest'”错误。 SySearchProductRequest 是我要使用的 objc 类。

我正在使用@testable import Mymodulename 在测试中导入我的具有此类的模块。

我坚持使用编写 objc 测试用例的方法,我不想这样做。有没有办法或者我做错了什么或错过了什么来完成这项工作。

【问题讨论】:

codesheriff.blogspot.com/2015/05/… 也不起作用。 我尝试在我的测试目标中添加 $CONFIGURATION_TEMP_DIR/MyProject.build/DerivedSources 以在我的 HEADER SEARCH PATHS 中包含派生源,它似乎已经解决了这个问题,尽管我尝试了多种方法所以不确定这个。 试过了,它对我不起作用,因为没有任何 Objective-C 头文件被复制到 $CONFIGURATION_TEMP_DIR/MyProject.build/DerivedSources。 【参考方案1】:

只需检查您的类是否已添加到文件检查器Example Screenshot 的目标成员中的测试目标中。然后再次构建项目。希望它能消除错误。

【讨论】:

嘿@Saurabh 我使用可测试导入来解析路径,因此不需要此步骤。谢谢 Saurabh,我强烈反对将生产代码添加到测试目标中。虽然“它有效”,但它是不正确的。 好的@乔恩·里德。我会考虑并尝试为问题找到更好的解决方案。谢谢。 @JonReid 您能否进一步说明您不鼓励将生产代码添加到测试目标?除非将其添加到测试目标中,否则您将如何测试生产代码? @Petar 正确设置后,测试目标链接到生产代码目标。除了声明为私有的东西外,所有东西都可以通过@testable import 访问。

以上是关于无法在快速单元测试中使用 Objective-C 类的主要内容,如果未能解决你的问题,请参考以下文章

使用 Objective-C++ 时单元测试未解析的符号

无法在 Xcode UI 测试中点击表格单元格

用于单元测试 Objective-C XCTest 的 .m 文件中的访问变量定义

如何从 Swift 单元测试访问测试目标中存在的 Objective-C 代码?

导入头文件时单元测试失败

Objective-C 中的单元测试私有类