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

tfr*_*377 22 unit-testing access-control ios xctest swift

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

var vc: LoginViewController!
Run Code Online (Sandbox Code Playgroud)

当然,我得到"使用未声明的类型'LoginViewController'"错误.

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

xcode迅速错误

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

tfr*_*377 37

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

测试目标桥接头

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

文艺青年最爱的

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


Ant*_*ong 14

我正在使用Xcode 6.1

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

在此输入图像描述

  • 必须有更好的方法来做到这一点.向测试目标添加代码会大大减慢测试速度.在Objective-C中,您无需将源添加到测试目标 (7认同)

hwa*_*xer 14

如果你正在使用Xcode 7,现在有一个更好的方法来处理这个问题@testable import {ModuleName}.

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