2014-10-31 60 views
21

我看了很多博客,并尝试了很多东西来让我的Swift单元测试在Xcode 6.0.1(或6.1)中工作。我想访问我的应用程序的目标类,所以我写了这行:添加Swift文件到测试目标没有修复单元测试

var vc: LoginViewController! 

当然,我得到的错误“未申报类型为‘LoginViewController’使用”。

然后,我尝试将LoginViewController添加到我的测试目标中,但随后在我的项目中的其他类中出现“使用未解析的标识符”错误。所以我尝试这些类添加到我的测试目标,但我结束了错误的像下面的截图看似无尽源泉:

xcode swift errors

声明我的所有类为public,导致其他错误,好像不好的做法。无论如何,在依赖许多框架和类的Swift项目中包含单元测试?我只是想从几乎完全像这个article中的代码开始。

+1

双重检查目标成员资格。如果它已经完成,请尝试清理项目,删除派生数据并重新启动XCode。 – 2014-10-31 21:46:34

+0

到目前为止还没有工作,我现在使用单元测试的主要问题是使用第三方静态框架。将类添加到测试目标,然后调用该框架中的函数会导致“使用未解析的标识符'className'” – tfrank377 2014-11-03 17:56:47

+0

检查以确保您的桥接头类/目录已同时在App目标和App测试目标中列出。 – 2014-11-05 18:56:32

回答

32

后大为头痛,并把这种能拖就拖的target membership,我发现,主要的问题是向测试目标成员添加文件时,Objective-C类仍然会抱怨。我认为这是Swift进行单元测试的新方式的一个旧兼容性问题,但解决方案是我的测试目标不知道桥接头。因此,我在我的测试目标的构建设置添加到它的引用,就像这样:

test target bridging header

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

文艺青年最爱的

单元测试在斯威夫特工作,测试目标必须知道的一切应用目标都知道,所以在您的测试目标引用添加到您的桥接报过(如适用)。

+0

我花了太多时间试图了解为什么我的测试无法正常工作。谢谢! – dccarmo 2015-03-10 16:38:06

+1

您可能需要将测试目标“生成设置”下的过滤器从“基本”更改为“全部”,才能显示此过滤器。 – Andrew 2015-05-04 15:27:24

15

我使用的Xcode 6.1

您需要将您的SWIFT文件添加到测试目标

enter image description here

+0

我真的需要它在Xcode 6.0上工作以实现自动化构建原因,但是我在Xcode 6.1中试过了,它给了我“使用未解析标识符'className'”的错误。 – tfrank377 2014-10-31 21:54:24

+7

必须有更好的方法来做到这一点。向测试目标添加代码会减慢测试的速度。在Objective-C中,您不需要将测试目标添加到测试目标中 – 2015-02-12 19:42:59

13

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

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