Xcode 7:无法创建带有单元测试目标的Swift命令行工具

时间:2015-12-04 20:56:22

标签: xcode swift unit-testing

哦,Xcode!

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

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

我已经搞砸了好几个小时了,伟大的谷歌一直没有帮助。 (我使用Xcode 7,Xcode 6看起来非常不同。)有人可以帮助我吗?

感谢。

3 个答案:

答案 0 :(得分:18)

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

enter image description here

在测试应用程序目标时,您不会这样做。我认为命令行目标不能被选为单元测试目标的测试主机可能与此问题有关:

enter image description here

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

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

答案 1 :(得分:4)

在努力解决这个问题后,解决方案对我有用:

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

答案 2 :(得分:1)

在某些情况下,将相同的文件添加到两个实用程序并且测试目标不可能(某种循环导致重新定义)。

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