【问题标题】:Is it possible to run XCTest based tests under Instruments in Xcode 5?是否可以在 Xcode 5 的 Instruments 下运行基于 XCTest 的测试?
【发布时间】:2014-01-28 15:44:09
【问题描述】:

查看 XCTest 和 Xcode 5 单元测试,却没有看到如何在 Xcode 5 中的 Instruments 下运行我的单元测试...

具体来说,我想在测试期间寻找泄漏(在这种情况下,这不一定是自动化的,但显然这很有用)。

可能吗?

【问题讨论】:

  • 请注意下面@quelish 的回答。现在可以通过测试本身的上下文菜单在 Xcode 7 中使用 - 感谢 Xcode 团队!

标签: xcode5 xcode-instruments xctest


【解决方案1】:

我认为这是最简单的方法:

  1. 在测试中的某处设置断点(我一直在 setup 方法中这样做)
  2. 在仪器中打开一个新文档
  3. 运行应用程序并确保它在断点处停止
  4. 从 Instruments 的 Target 下拉菜单中选择 Attach to Process 并向下滚动到您的流程
  5. 点击记录,然后在 XCode 中恢复

【讨论】:

  • 我正在研究同样的问题。我的单元测试中有僵尸,我不知道是什么原因造成的。我应该选择什么流程?
  • @FergalRooney 它将是您的应用程序的名称。这是一个screenshot,将它附加到我创建的名为 ShapeAnimationTest 的测试项目中。我忘了在我的原始答案中提到您需要先运行应用程序,然后才能在 Instruments 中找到它。
  • 感谢截图。我通过按照您列出的步骤选择我的应用程序进行了尝试,但是在运行仪器时以及在设置断点后继续测试之后,我没有看到任何分配。似乎它根本没有分析应用程序。
  • 如果该屏幕截图是任何指标,则此答案似乎适用于应用程序,但不适用于单元测试包。
  • 通过选择“xctest”过程,这适用于我的测试包。但是,如果我需要追踪僵尸,我需要以不同的方式执行此操作,请参阅我的答案以了解另一种方法。
【解决方案2】:

我根据我正在测试的 mac app 目标创建了一个新目标,然后将 xctest 类添加到要编译的文件中。

然后我将 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks/XCTest.framework 添加到要链接的框架中。

然后将其路径 $(DEVELOPER_DIR)/Platforms/MacOSX.platform/Developer/Library/Frameworks 添加到 Runpath Search Paths

然后在 main.m 我添加了以下内容:

    XCTestSuite *suite = [XCTestSuite testSuiteWithName:@"My tests"];
    [suite addTest:[VideohogCachingTest testCaseWithSelector:@selector(testCompleteSequentialText)]];
    [suite run];

这在类 VideohogCachingTest 上运行了测试 testCompleteSequentialText,我需要作为普通应用程序运行,因此允许我通过 command+R 或在此运行测试案例,使用 command+I 进行分析。然后我可以抓到一个僵尸并追踪问题,这在以前对我来说是不可能的。 如果您想运行所有测试,您可以这样做:

XCTestSuite *suite = [XCTestSuite defaultTestSuite];
[suite run];

【讨论】:

  • 这对我很有帮助,因为您似乎必须编译 for profiling 才能在分配中获取 Swift 符号。请注意,我还必须将该路径添加到框架搜索路径中,并编辑方案以使 Profile 使用 Debug 配置。
【解决方案3】:

这是在 Xcode 6 下的正确方法:

1) 在您的 Xcode 项目中,显示“Products”文件夹,选择“.xctest”产品,右键单击,最后在上下文菜单中选择“Reveal in Finder”。

2) 启动 Instruments 并使用您选择的模板创建一个新文档。

3) 为文档执行“选择目标...”

4) 导航并选择 Xcode 用于运行位于 /Applications/Xcode.app/Contents/Developer/usr/bin/xctest 的测试的工具(您可以在终端中使用 xcrun -f xctest 找到此位置) - 您需要启用“遍历包”才能在 Xcode 应用程序中导航。

5) 将步骤 1 中显示的“.xctest”产品从 Finder 拖放到“参数”字段中 - 这将输入其绝对路径。

6) 点击“选择”。

您现在可以从 Instruments 运行单元测试了!

【讨论】:

    【解决方案4】:

    在 Xcode 中,在测试导航器中右键单击您的测试并选择“Profile "TestName"”:

    【讨论】:

    • 是的!功能请求有效!现在在 Xcode 中可用。 (不在 Xcode 5 中)。感谢您向可能会发现这个老问题的人指出这一点。
    • 这似乎被 Xcode 8 破坏了。菜单项仍然存在,但 Instruments 只显示“所有进程”,并且 Xcode 没有开始测试。
    • 在 Xcode 8 中,这可能只适用于 UI 测试。
    • “未能安装请求的应用程序”。 “在提供的路径中找不到应用程序。” Xcode 10.2.1。解决方案是我需要将我们的应用程序添加到我们测试方案的 Profile 部分。不过,这还不是 100%。
    • 这会为我启动仪器,但似乎没有更进一步。没有明显的错误。它提示我选择一个模板,打开一个新文档,然后……什么都没有。 Xcode 12.4 上的 Bug Sur。
    【解决方案5】:

    Profile 提示 InstrumentsActivity Monitor, Allocations, Time Profiler...

    有几个注意事项:

    应用程序

    • 活动监视器仅适用于真实设备

    单元测试包

    • 仅适用于模拟器
    • 活动监视器不可用

    UI 测试包

    • 分析不可用

    【讨论】:

      猜你喜欢
      • 2017-05-18
      • 2017-09-28
      • 2013-10-20
      • 2016-02-05
      • 2016-08-16
      • 1970-01-01
      • 2013-08-18
      • 2016-07-05
      • 1970-01-01
      相关资源
      最近更新 更多