10

我正在开发一个数据库访问库,并且正在尝试使用已经编写的单元测试来检查内存泄漏。

这些是基于 SenTestingKit 的逻辑测试,在 Xcode 4.2 中设置正常方式。我可以使用 Cmd-U 很好地运行它们,但看不到从 Instruments 启动它们的方法,或者调用 Instruments 来检查它们。

我怎样才能使这项工作?我是否需要编写新案例并将其构建到应用程序中?

这个问题是关于泄漏检查单元测试,但我认为是 pre-SenTestingKit。)

4

2 回答 2

10

这个答案从 SenTest for OS X 开始。如果您担心在仪器下使用 SenTest for iOS,请跳到下一节。

仪器中的 OS X 单元测试

我意识到这有点晚了,但是我今天需要在逻辑测试中运行仪器并让它适用于我的环境,所以这就是我所做的:

  1. 在 Instruments 运行的情况下,创建一个新文档。
  2. 从文档中的 Target 下拉菜单中选择 Target
  3. 选中右下角的“Traverse Packages”选项,让您可以深入了解 Xcode 包的内部
  4. 导航到 /Applications/Xcode 并在 /Applications/Xcode.app/Contents/Developer/Tools/ 中找到 otest 二进制文件并选择它
  5. 添加OBCJ_DISABLE_GCYES作为环境变量(如果您正在运行 GC,请不要这样做)
  6. 添加DYLD_FRAMEWORK_PATH并指向包含 .octest 包的目录
  7. 添加DYLD_LIBRARY_PATH与 DYLD_FRAMEWORK_PATH 相同的值
  8. 将工作目录设置为 .xcodeproj 所在的目录
  9. 对于参数,使用-SenTest Self.octest 包的完整路径

某些环境变量和您的工作目录可能不是必需的,具体取决于您是否需要加载其他框架以及您的代码目录中是否有需要阅读的测试文件。因此,如果这些步骤不适用于您,您可以省略这些步骤。

完成后,您将能够保存文档并使用它来运行测试。

仪器中的 iOS 单元测试

在 OP 明确要求后,我开始使用基于 iOS 模拟器的项目验证基本说明。

对于 iOS,您需要一些不同的配置,因为您正在调试不同的可执行文件,并且您将需要不同的库。因此,DYLD_FRAMEWORK_PATH 将包含 .octest 包目录的路径和模拟器框架的路径。后者将是这样的: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/Developer/Library/Frameworks 取决于您使用的模拟器版本,我们将在下面将其称为 SDKPATH

  1. 在 Instruments 运行的情况下,创建一个新文档。
  2. 从文档中的 Target 下拉菜单中选择 Target
  3. 选中右下角的“Traverse Packages”选项,让您可以深入了解 Xcode 包的内部
  4. 导航/Applications/Xcode并找到其中的 otest 二进制文件/Applications/Xcode/Developer/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/Developer/usr/bin/并选择它
  5. 添加DYLD_LIBRARY_PATH并指向包含 .octest 包的目录
  6. 添加DYLD_ROOT_PATH指向 SDKPATH(上图)
  7. IPHONE_SIMULATOR_ROOT使用 SDKPATH添加(上)
  8. 添加DYLD_FRAMEWORK_PATH并指向包含 .octest 包和 SDKPATH(上图)的目录,:在路径列表中用冒号 ( )分隔它们
  9. 添加CFFIXED_USER_HOME您的 iPhone 模拟器主页(~/Library/Application Support/iPhone Simulator尽管我在将其放在这里之前已经对其进行了扩展,因为我不确定 ~ 是否被解释)
  10. 将工作目录设置为 .xcodeproj 所在的目录
  11. 对于参数,使用-SenTest Self.octest 包的完整路径
于 2012-12-05T15:20:10.973 回答
5

这是另一种更简单的方法,并且可以更好地控制您的配置文件:

在 setUp 的开头放置一个断点并运行您要运行的测试。当 Xcode 遇到断点时,打开 Instruments 并在目标下搜索 octest。然后,您可以简单地附加到该过程。切换到 Xcode 并在断点后继续运行,仪器应该分析您想要运行的所有测试。

希望这可以帮助。

于 2013-07-22T14:05:20.560 回答