添加Swift文件以测试目标而不是修复单元测试

时间:2014-10-31 20:50:25

标签: ios unit-testing swift access-control xctest

我查看了很多博客并尝试了许多方法让我的Swift单元测试在Xcode 6.0.1(或者6.1)中工作。我正在尝试访问应用程序目标中的类,所以我写了这一行:

var vc: LoginViewController!

当然,我得到了“使用未声明的类型'LoginViewController'”错误。

然后我尝试将LoginViewController添加到我的测试目标,但随后我在项目中的其他类上“使用了未解析的标识符”错误。所以我尝试将这些类添加到我的测试目标中,但我最终得到了一个看似无穷无尽的错误来源,如下面的截图:

xcode swift errors

将我的所有课程声明为公开课程会导致其他错误,这似乎是不好的做法。无论如何,在依赖于许多框架和类的Swift项目中包含单元测试?我只是想从与article中的代码完全相同的东西开始。

3 个答案:

答案 0 :(得分:36)

经过一番头痛并把它放在后面,我发现主要的问题是在将文件添加到测试目标成员资格时,Objective-C类仍然会抱怨。我认为这是一个旧的兼容性问题,Swift进行单元测试的新方式,但解决方案是我的测试目标不知道有一个桥接头。因此,我在测试目标的构建设置中添加了对它的引用,如下所示:

test target bridging header

现在看似简单明了,但错误无益。我没有看到Swift单元测试的其他解决方案表明这可能是一个问题,但现在我知道了。

<强>铊组成; dr

要在Swift中使用单元测试,测试目标必须知道应用目标所知的所有内容,因此也要在测试目标中添加对桥接头的引用(如果适用)。

答案 1 :(得分:14)

我正在使用Xcode 6.1

您需要将swift文件添加到测试目标的target membership

enter image description here

答案 2 :(得分:14)

如果您正在使用Xcode 7,现在使用@testable import {ModuleName}处理此问题的方法要好得多。

只需确保您要测试的模块的构建设置Enable Testability设置为YES