我正在开发一个数据库访问库,并且正在尝试使用已经编写的单元测试来检查内存泄漏。
这些是基于 SenTestingKit 的逻辑测试,在 Xcode 4.2 中设置正常方式。我可以使用 Cmd-U 很好地运行它们,但看不到从 Instruments 启动它们的方法,或者调用 Instruments 来检查它们。
我怎样才能使这项工作?我是否需要编写新案例并将其构建到应用程序中?
(这个问题是关于泄漏检查单元测试,但我认为是 pre-SenTestingKit。)
我正在开发一个数据库访问库,并且正在尝试使用已经编写的单元测试来检查内存泄漏。
这些是基于 SenTestingKit 的逻辑测试,在 Xcode 4.2 中设置正常方式。我可以使用 Cmd-U 很好地运行它们,但看不到从 Instruments 启动它们的方法,或者调用 Instruments 来检查它们。
我怎样才能使这项工作?我是否需要编写新案例并将其构建到应用程序中?
(这个问题是关于泄漏检查单元测试,但我认为是 pre-SenTestingKit。)
这个答案从 SenTest for OS X 开始。如果您担心在仪器下使用 SenTest for iOS,请跳到下一节。
我意识到这有点晚了,但是我今天需要在逻辑测试中运行仪器并让它适用于我的环境,所以这就是我所做的:
OBCJ_DISABLE_GC
值YES
作为环境变量(如果您正在运行 GC,请不要这样做)DYLD_FRAMEWORK_PATH
并指向包含 .octest 包的目录DYLD_LIBRARY_PATH
与 DYLD_FRAMEWORK_PATH 相同的值-SenTest Self
.octest 包的完整路径某些环境变量和您的工作目录可能不是必需的,具体取决于您是否需要加载其他框架以及您的代码目录中是否有需要阅读的测试文件。因此,如果这些步骤不适用于您,您可以省略这些步骤。
完成后,您将能够保存文档并使用它来运行测试。
在 OP 明确要求后,我开始使用基于 iOS 模拟器的项目验证基本说明。
对于 iOS,您需要一些不同的配置,因为您正在调试不同的可执行文件,并且您将需要不同的库。因此,DYLD_FRAMEWORK_PATH 将包含 .octest 包目录的路径和模拟器框架的路径。后者将是这样的:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/Developer/Library/Frameworks
取决于您使用的模拟器版本,我们将在下面将其称为 SDKPATH
/Applications/Xcode
并找到其中的 otest 二进制文件/Applications/Xcode/Developer/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/Developer/usr/bin/
并选择它DYLD_LIBRARY_PATH
并指向包含 .octest 包的目录DYLD_ROOT_PATH
指向 SDKPATH(上图)IPHONE_SIMULATOR_ROOT
使用 SDKPATH添加(上)DYLD_FRAMEWORK_PATH
并指向包含 .octest 包和 SDKPATH(上图)的目录,:
在路径列表中用冒号 ( )分隔它们CFFIXED_USER_HOME
您的 iPhone 模拟器主页(~/Library/Application Support/iPhone Simulator
尽管我在将其放在这里之前已经对其进行了扩展,因为我不确定 ~ 是否被解释)-SenTest Self
.octest 包的完整路径这是另一种更简单的方法,并且可以更好地控制您的配置文件:
在 setUp 的开头放置一个断点并运行您要运行的测试。当 Xcode 遇到断点时,打开 Instruments 并在目标下搜索 octest。然后,您可以简单地附加到该过程。切换到 Xcode 并在断点后继续运行,仪器应该分析您想要运行的所有测试。
希望这可以帮助。