【问题标题】:Running SenTestingKit unit tests in Instruments在 Instruments 中运行 SenTestingKit 单元测试
【发布时间】:2012-06-13 07:29:47
【问题描述】:

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

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

我怎样才能做到这一点?我是否需要编写新案例并将其构建到应用程序中?

This question 是关于泄漏检查单元测试,但我认为是 pre-SenTestingKit。)

【问题讨论】:

    标签: xcode memory-leaks instruments sentestingkit


    【解决方案1】:

    这是另一种更简单的方法,可以更好地控制您的个人资料:

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

    希望这会有所帮助。

    【讨论】:

    • 它说“当前仪器不允许附加”。尝试使用“泄漏”和“分配”
    • 在Xcode中使用“Profile”运行设置能正常附加吗?
    【解决方案2】:

    此答案从 SenTest for OS X 开始。如果您担心在仪器下使用 SenTest for iOS,请跳至下一部分。

    仪器中的 OS X 单元测试

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

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

    【讨论】:

    • 我很想像你一样让它工作,但是当我推送记录时什么都没有发生。我选择了 otest 二进制文件并将 DYLD 标志设置为 /Users/compName/Library/Developer/Xcode/DerivedData/projectName/Build/Products/Debug-iphonesimulator (.octest 包位于该目录中),-SenTest 的参数自 /Users/everythingInTheAboveLink,以及包含 .xcodeproj 的目录的工作目录。但是……什么都没有。建议?我可能在这里遗漏了一些东西..不是仪器专家。提前致谢。
    • 已编辑以包含 iOS SenTestKit 项目的操作方法。原来的帖子没有具体说明 iOS,所以我假设是 OS X。但是,我已经让它工作了,这里是修改后的说明集。
    • 感谢@noa 指出其中一条路径是错误的。现已修复。
    • 感谢整理这些说明!我终于按照这些步骤追踪了一些内存泄漏!
    • @gaige “遍历包”选项在哪里?使用 Xcode 4.6.3 并尝试在 iOS 上执行此操作...
    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多