如何在Xcode 6上对应用程序扩展进行单元测试

liu*_*ong 18 xcode unit-testing ios

有谁知道如何在app扩展目标上执行单元测试,尤其是键盘扩展目标?

我尝试了什么(在单元测试目标中):

  • 在"常规"点按中,将其目标设置为扩展目标而不是容器应用.
  • 将"Bu​​ndle Loader"设置为扩展目标的二进制路径,如下所示 $(BUILT_PRODUCTS_DIR)/com.mycompany.keyboard.appex/com.mycompany.keyboard
  • 将"测试主机"设置为$(BUNDLE_LOADER).
  • 在"Build Phases"点击中,将"Target Dependencies"设置为容器应用和扩展.

完成这些操作后,我可以成功构建它,但始终会使用日志获得"测试失败" Test target SogouInputTests encountered an error (Test session exited(1). without checking in. If you believe this error represents a bug, please attach the log file at /tmp/TestStatus-UXfvxw.log).

我正在使用Xcode 6 beta 3.

liu*_*ong 15

我向Apple报告了这个错误.可悲的是,答案是键盘扩展现在不支持单元测试.答案来自Apple:

  • 目前不支持在应用扩展程序中运行单元测试
  • 相反,将要测试的代码纳入框架并在那里测试代码
  • 将框架链接到您的扩展


yur*_*gis 5

刚刚在尝试对扩展进行单元测试时遇到了类似的问题。独立地做了与作者完全相同的事情,使用 Bundle Loader 指向 .appx 路径,当然没有成功。我真的不喜欢创建一个单独的框架只是为了测试的想法,所以我最终将可测试的源添加到扩展测试目标中。如果您的扩展中没有太多源文件,这非常简单:

  1. 在项目设置中选择您的扩展测试目标
  2. 转到构建阶段
  3. 展开编译源
  4. 点击+
  5. 添加带有可测试代码的源文件。
  6. 为测试而构建

为什么它有效:

一旦您将扩展源添加到扩展测试目标中,XCode 将双重引用它们中的每一个,并在正常扩展构建和测试构建中进行编译,从而消除链接问题。

有什么缺点吗?

您必须手动同步扩展测试目标中的源文件列表。每当您在扩展目标中添加/删除文件时,您可能需要在其测试目标中执行相同的操作。