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 单元测试导致标识符未解析的主要内容,如果未能解决你的问题,请参考以下文章