我正在开发一个数据库访问库,我正在尝试使用已经编写的单元测试来检查内存泄漏。
这些是基于SenTestingKit的逻辑测试,在Xcode 4.2中以正常方式设置。我可以使用 Cmd-U 运行它们,但没有看到从仪器启动它们或调用仪器来检查它们的方法。
我怎样才能做到这一点?我是否需要编写新案例并将其构建到应用程序中?
(这个问题是关于泄漏检查单元测试的,但我认为是SenTestingKit之前的。
这个答案从 SenTest for OS X 开始。 如果您担心在仪器下使用 SenTest for iOS,请跳到下一部分。
仪器中的 OS X 单元测试
我意识到这有点晚了,但我今天需要在逻辑测试上运行仪器,并让它适用于我的环境,所以我做了:
- 在运行仪器的情况下,创建一个新文档。
- 从文档的"目标"下拉列表中选择"目标"
- 选中右下角的"遍历包"选项,以便您深入了解 Xcode 包 的内部导航到/Applications/Xcode,
- 在/Applications/Xcode.app/Content/Developer/Tools/中找到最糟糕的二进制文件并选择它
- 将值为
YES
的OBCJ_DISABLE_GC
添加为环境变量(如果您正在运行 GC,请不要这样做) - 添加
DYLD_FRAMEWORK_PATH
并指向包含 .octest 包的目录 - 添加与DYLD_FRAMEWORK_PATH值相同的
DYLD_LIBRARY_PATH
- 将工作目录设置为.xcodeproj所在的目录
- 对于参数,请使用
-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
- 在运行仪器的情况下,创建一个新文档。
- 从文档的"目标"下拉列表中选择"目标"
- 选中右下角的"遍历包"选项,以便您深入了解 Xcode 包 的内部
- 导航到
/Applications/Xcode
并在/Applications/Xcode/Developer/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/Developer/usr/bin/
中找到最糟糕的二进制文件并选择它 - 添加
DYLD_LIBRARY_PATH
并指向包含 .octest 包的目录 - 添加
DYLD_ROOT_PATH
仅指向 SDK路径(上图) - 使用 SDKPATH 添加
IPHONE_SIMULATOR_ROOT
(上图) - 添加
DYLD_FRAMEWORK_PATH
并指向包含 .octest 包和 SDKPATH 的目录(上图),在路径列表中用冒号 (:
) 分隔它们 - 使用您的iPhone模拟器主页添加
CFFIXED_USER_HOME
(~/Library/Application Support/iPhone Simulator
尽管我在将其放在这里之前已经扩展了它,因为我不确定~是否被解释) - 将工作目录设置为.xcodeproj所在的目录
- 对于参数,请使用
-SenTest Self
和 .octest 包的完整路径
这是另一种方法,它更简单,可以更好地控制您分析的内容:
在 setUp 开始时放置一个断点,然后运行要运行的测试。当 Xcode 遇到断点时,打开"仪器"并在目标下搜索 octest。然后,您可以简单地附加到该过程。切换到 Xcode 并在断点后继续运行,仪器应分析要运行的所有测试。
希望这有帮助。