XCode 5单元测试:启动我的应用程序

dhr*_*hrm 32 xcode objective-c xcode5 xctest

当我在XCode 5中运行我的测试时,我的OS X应用程序的主窗口在运行测试时会在屏幕上显示几秒钟.为什么?即使我取消注释我的所有测试,它仍会打开我的主窗口.

Bry*_*hen 37

您正在运行应用程序测试,而不是逻辑测试.这意味着您的应用程序实例将启动,然后运行单元测试.这允许您执行一些需要您的应用程序运行的集成测试.

以下是设置应用程序测试和逻辑测试的指南.

如果你想将它改为逻辑测试(所以它运行得更快,不需要先启动你的应用程序):

  1. 去构建单元测试目标的设置
  2. 搜索 Bundle
  3. 删除Bundle Loader和Test Host

在此输入图像描述

  • 当我这样做时,测试目标无法正确链接.测试目标是由XCode创建的(测试导航器中有New test target选项),除此之外我还没有触及它. (9认同)
  • 在XCode 6中也不可能. (7认同)
  • 这在Xcode 5中是不可能的.请参阅上面的openradar链接:http://openradar.appspot.com/15859153 (4认同)
  • 适用于 Xcode7,您可以在测试目标的“常规”选项卡中将“主机应用程序”设置为“无” (2认同)

小智 10

多数民众赞成在右边,您必须从构建设置中删除"Bundle Loader"和"Test Host".

但是您必须将必要的实现文件添加到单元测试目标中.必要的文件是您要在单元测试用例中使用的文件.你需要这样做,因为在逻辑测试中,XCode不会编译整个应用程序.所以你的一些文件将丢失.

如果您遗漏了文件,则会显示错误消息:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_Module", referenced from:
      objc-class-ref in Lobic Network.o
      objc-class-ref in Logic_Unit.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

您可以通过选择实施文件并调出文件检查器来添加缺少的文件.将有一个名为"目标成员资格"的部分,您也可以将文件目标成员资格设置为单元测试.


Hac*_*ach 9

随着XCTest,应用程序文件不要需要包含XCTest目标之内.XCTest包与应用程序链接,后者在运行时使这些文件可用.

要使其工作,请确保编译器选项" 默认情况下隐藏的符号 " 在应用程序目标中设置为NO.

这是一篇博客文章,屏幕截图清晰:http: //zmcartor.github.io/code/2014/02/24/slim-xctest-targets

这种方法的优点是测试目标的构建速度要快得多.