【问题标题】:Adding Swift files to test target not fixing unit tests将 Swift 文件添加到测试目标而不是修复单元测试
【发布时间】:2014-12-28 06:39:34
【问题描述】:

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

var vc: LoginViewController!

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

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

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

【问题讨论】:

  • 仔细检查目标成员资格。如果已经完成,请尝试清理项目,删除派生数据并重新启动 XCode。
  • 到目前为止还没有奏效,我现在单元测试的主要问题是使用第三方静态框架。将类添加到测试目标然后调用该框架中的函数会导致“使用未解析的标识符 'className'”
  • 检查以确保您的桥接头类/目录列在 App 目标和 App 测试目标中。

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


【解决方案1】:

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

现在看起来简单明了,但错误没有帮助。我没有看到其他针​​对 Swift 单元测试的解决方案表明这可能是一个问题,但现在我知道了。

Tl;dr

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

【讨论】:

  • 我花了太多时间试图理解为什么我的测试不起作用。谢谢!
  • 您可能需要在您的测试目标构建设置下将过滤器从“基本”更改为“全部”才能显示出来。
【解决方案2】:

如果您使用的是 Xcode 7,现在可以使用 @testable import {ModuleName} 更好地处理此问题。

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

【讨论】:

    【解决方案3】:

    我使用的是 Xcode 6.1

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

    【讨论】:

    • 出于自动构建的原因,我确实需要它在 Xcode 6.0 上工作,但我在 Xcode 6.1 中尝试过,它给了我“使用未解析的标识符 'className'”错误。
    • 必须有更好的方法来做到这一点。向测试目标添加代码会大大降低测试速度。在 Objective-C 中,您不需要将源代码添加到测试目标中
    • 这也会导致符号解析出现问题。由于该类两次包含在二进制文件中,因此使用 as 的代码可能无法正确解析。
    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多