iOS Swift 单元测试导致标识符未解析

Posted

技术标签:

【中文标题】iOS Swift 单元测试导致标识符未解析【英文标题】:iOS Swift unit test result in unresolved identifier 【发布时间】:2014-06-29 14:57:37 【问题描述】:

swift 中用于测试的简单函数:

func testExample() 
    var tagname = "someClass()"
    var logger = Device("", "") //unresolved identifier

    XCTAssert(true, "Pass")

即使我用“import”导入了我的模块,我仍然无法使用我的模块中的类。此外,虽然我可能在项目中搞砸了一些东西,但我的示例项目中没有一个允许我使用模块类。

似乎它应该可以工作,但可能在 beta 2 中已损坏。

编辑:修复它 IDE 没有检查参数名称。似乎 Xcode 仍然有点不确定

【问题讨论】:

【参考方案1】:

我今天遇到了同样的问题,不确定这是否只是最近才可用 - 而不是在您的测试文件中使用 import TARGET_NAME 和/或将您的类/方法声明为 public,您可以将您的文件添加到您的测试通过 XCode 的 File Inspector 定位目标。

Cmd + Opt + 1 在任何文件中显示它,并为您的测试目标选中Target Membership 下的框。

您可能需要重建....Cmd + b

这是否应该特定于我的系统......我正在运行 Xcode 6.3 beta 1,并通过 Quick + Nimble 进行测试,两者都安装了最新的 cocoapods beta。

【讨论】:

试了很多方法,只有这个有效。 如果您添加这样的文件并且还使用@testable import 功能,请小心,因为您最终会出现“无法将类型'X'的值分配给类型'X'”错误.见forums.developer.apple.com/thread/24474。此外,“干净”有时似乎很有趣。在我删除文件并切换到 @testable 导入后,我得到了“未解析的标识符”,并且清理没有帮助。修改一个文件后,错误消失了…… 您收到错误的文件可能作为目标成员身份添加到您的测试或 UITests 目标中,而失败的代码位于未添加的文件中。删除 Tests 成员资格对我有用,但我认为这两个文件必须具有相同的 Target Memberships【参考方案2】:

我的问题是我的主要目标名称中有非字母数字字符。

我必须通过以下方式导入它(注意特殊的@testable annotation

@testable import my_tutorial_app

【讨论】:

【参考方案3】:

似乎在 Xcode 6 Beta 4 中您需要将公共类和方法声明为“公共”。示例:

public class Device 
    public init(...) 
    

    public func myMethod(...) 
    

现在可以从 swift 测试类访问它们。

【讨论】:

做到了。这只是临时解决办法吗?或者这就是事情的本意。与项目一起定义的测试不应该要求这样做。 (我可以理解这些是否是针对模块的验收测试)。 您可以使用“@testable import Foo”让您使用公共或“内部访问”函数/类。这样,您就可以在不完全公开的情况下进行测试。【参考方案4】:

我遇到了同样的问题,发现如果我这样称呼它就可以了:

SuperStructName.StructName

【讨论】:

以上是关于iOS Swift 单元测试导致标识符未解析的主要内容,如果未能解决你的问题,请参考以下文章

无法从 XCTest 访问应用程序代码

Swift之深入解析如何避免单元测试中的强制解析

在 xcode 项目中使用未解析的标识符“单元格”

通过标识符设置表格视图单元格高度 - Swift

iOS [Swift]:解析 Facebook 登录“使用未解析的标识符‘权限’”

iOS:未使用重用标识符清除单元格内容