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

时间:2014-07-08 08:55:42

标签: ios xcode unit-testing

有没有人知道如何在app扩展目标上执行单元测试,特别是键盘扩展目标?

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

  • 在“常规”点按中,将其目标设置为扩展目标,而不是容器应用。
  • 将“Bundle Loader”设置为扩展目标二进制文件的路径,如$(BUILT_PRODUCTS_DIR)/com.mycompany.keyboard.appex/com.mycompany.keyboard
  • 将“测试主机”设置为$(BUNDLE_LOADER)
  • 在“构建阶段”点击中,将“目标依赖关系”设置为容器应用和扩展。

完成这些工作后,我可以成功构建它,但总是使用日志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。

3 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:1)

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

  1. 在项目设置
  2. 中选择扩展测试目标
  3. 转到Build Phases
  4. 展开编译源
  5. 点击+
  6. 使用可测试代码添加源文件。
  7. 构建测试
  8. 为什么会这样:

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

    有任何缺点吗?

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

答案 2 :(得分:0)

我做的比其他建议(没有框架创建,没有关于构建设置的奇怪设置,阶段等)更容易的操作是将我想要测试的文件(来自扩展目标)添加到{{1} } 测试目标

enter image description here

唯一的“缺点”是您的测试目标还将包括扩展中的文件(而不是像主应用程序一样使用Target Membership),但是由于您没有交付测试目标,我会说没有缺点:)

在Xcode 10上进行了测试。