【问题标题】:Xcode 7: Can't create a Swift command line tool with a unit test targetXcode 7:无法创建带有单元测试目标的 Swift 命令行工具
【发布时间】:2016-03-09 21:56:12
【问题描述】:

哦,Xcode!

我受阻了。如果我创建一个 Mac OS Cocoa 应用程序,我会免费获得一个单元测试目标。但我想编写一个命令行工具(甚至是一个我可以链接到命令行工具的库)并针对它编写一些单元测试。如果我能弄清楚,我会被诅咒的。

我已经取得了足够的进展,我有一个命令行目标和一个测试目标。我可以“@testable import”我的命令行模块并使用测试代码中的代码,而 Xcode 中没有错误。但是,一旦我尝试运行我的测试 (Cmd-U),就会收到链接错误。主模块中的所有类都不能链接。什么?

我已经搞砸了好几个小时,而伟大的 Google 也没有任何帮助。 (我使用的是 Xcode 7,而 Xcode 6 看起来很不一样。)谁能帮帮我?

谢谢。

【问题讨论】:

    标签: xcode swift unit-testing


    【解决方案1】:

    到目前为止,我为这个问题找到的唯一解决方案是手动将包含要测试的代码的所有文件手动添加到单元测试目标:

    这是您在测试应用程序目标时不会做的事情。我认为无法选择命令行目标作为单元测试目标的测试主机这一事实可能与此问题有关:

    另一个可能需要更多工作的选项是将所有逻辑定义到框架中,并将命令行应用程序编写为它提供的 API 的使用者。

    通过这种方式,您可以轻松地按常规方式对框架进行单元测试,然后以调用它并断言结果的脚本的形式为命令行应用程序编写集成测试。

    【讨论】:

    • 我今天早上至少花了一个小时试图弄清楚为什么它不会构建。谢谢。
    【解决方案2】:

    在解决了这个问题之后,这是对我有用的解决方案:

    • 第 1 步:添加测试包。编辑器 > 添加目标、Cocoa 测试包
    • 第 2 步:编辑方案。产品 > 方案 > 编辑方案。选择测试,单击 +。在“选择要测试的目标作为此方案的一部分”下,选择您的测试目标。
    • 第 3 步:尝试进行简单测试

    【讨论】:

    • 请记住,在最新版本的 XCode 中不再有“Cocoa 测试包”,但您可以选择“macOS 单元测试包”。至少它在最新的 XCode8 版本中对我有用。
    • 这不适用于Xcode 9.2 (9C40b)。我的命令行目标没有出现在Choose targets to test as part of this scheme 对话框中。
    【解决方案3】:

    在某些情况下,无法将同一文件同时添加到实用程序和测试目标(某种循环导致重新定义)。

    但是,可以创建一个额外的应用程序目标,将除 main.swift 之外的所有实用程序文件添加到应用程序,然后将此应用程序用作测试的托管应用程序(并启用“允许测试主机应用程序API 复选框)。

    【讨论】:

      猜你喜欢
      • 2021-06-25
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2014-11-16
      • 2012-09-15
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多