如何使用NSDebugEnabled,NSZombieEnabled,MallocStackLogging运行OCUnit(SenTestingKit)?

时间:2010-09-25 14:59:44

标签: unit-testing xcode ios ocunit

我的错误类似于this post中的错误。现在,我确定我在某个地方犯了一些愚蠢的错误,可能与释放一个对象或一个观察者或者什么不相关,但是因为我似乎找不到调试代码的方法,我认为我可以使用NSDebugEnabled,NSZombieEnabled和MallocStackLogging(如图here所示)。

可以使用OCUnit完成吗?如果是这样,怎么样?我只是找不到“可执行文件”来设置这些参数......

谢谢! 阿维亚德。

4 个答案:

答案 0 :(得分:3)

不幸的是,Dave的解决方案无效 - 我不断收到错误和错误。我最终得到GHUnit来处理我的项目,通过调试发现问题,但它有自己的问题,所以我现在使用它和OCUnit,稍微更好地集成在显示结果的方面结果标签。

<强>叹息即可。我们什么时候才能看到一个,完整的Obj-C单元测试框架?

答案 1 :(得分:3)

这可能已在最近的Xcodes中修复,但我通过

获得了僵尸
  1. 进入计划(cmd&lt;)
  2. 打开测试,然后是参数选项卡
  3. 取消选中“使用运行操作的参数和环境变量”
  4. “+”环境变量“NSZombieEnabled”=“是”

答案 2 :(得分:2)

嗯,NSZombieEnabled和朋友是环境变量,这意味着他们必须在可执行文件上运行。单元测试包的默认设置是在构建过程中运行测试,而不是在执行期间运行。

因此解决此问题的方法是使其在构建阶段不运行测试,而是将其作为可执行文件的一部分运行。

我是这样做的:

  1. 在单元测试包目标内,删除“运行脚本”构建阶段。这是在编译后执行测试的步骤。
  2. 从“项目”菜单中选择“新建自定义可执行文件...”并将其命名为有意义的内容,例如“otest”
  3. 将可执行路径设为otest二进制文件,该二进制文件应位于/Developer/Tools/otest
  4. 在otest可执行文件上设置以下环境变量:
    • DYLD_FRAMEWORK_PATH =&gt; {UnitTest.bundle}/Contents/Frameworks
    • DYLD_LIBRARY_PATH =&gt; {UnitTest.bundle}/Contents/Frameworks
  5. 在otest可执行文件上设置以下程序参数:
    • -SenTest All(这将运行所有单元测试)
    • {UnitTest.bundle}
  6. 现在,您可以选择单元测试包作为活动目标,将otest可执行文件作为活动可执行文件,然后进行构建和调试。这将允许您设置断点,设置其他环境变量(如NSZombieEnabled)等。

    如果您只想调试特定套件或特定单元测试,可以将-SenTest All参数更改为-SenTest MyUnitTestSuite-SenTest MyUnitTestSuite/myUnitTestMethod

答案 3 :(得分:2)