我的错误类似于this post中的错误。现在,我确定我在某个地方犯了一些愚蠢的错误,可能与释放一个对象或一个观察者或者什么不相关,但是因为我似乎找不到调试代码的方法,我认为我可以使用NSDebugEnabled,NSZombieEnabled和MallocStackLogging(如图here所示)。
可以使用OCUnit完成吗?如果是这样,怎么样?我只是找不到“可执行文件”来设置这些参数......
谢谢! 阿维亚德。
答案 0 :(得分:3)
不幸的是,Dave的解决方案无效 - 我不断收到错误和错误。我最终得到GHUnit来处理我的项目,通过调试发现问题,但它有自己的问题,所以我现在使用它和OCUnit,稍微更好地集成在显示结果的方面结果标签。
<强>叹息即可。我们什么时候才能看到一个好,完整的Obj-C单元测试框架?
答案 1 :(得分:3)
这可能已在最近的Xcodes中修复,但我通过
获得了僵尸答案 2 :(得分:2)
嗯,NSZombieEnabled
和朋友是环境变量,这意味着他们必须在可执行文件上运行。单元测试包的默认设置是在构建过程中运行测试,而不是在执行期间运行。
因此解决此问题的方法是使其在构建阶段不运行测试,而是将其作为可执行文件的一部分运行。
我是这样做的:
otest
二进制文件,该二进制文件应位于/Developer/Tools/otest
DYLD_FRAMEWORK_PATH
=&gt; {UnitTest.bundle}/Contents/Frameworks
DYLD_LIBRARY_PATH
=&gt; {UnitTest.bundle}/Contents/Frameworks
-SenTest All
(这将运行所有单元测试){UnitTest.bundle}
现在,您可以选择单元测试包作为活动目标,将otest可执行文件作为活动可执行文件,然后进行构建和调试。这将允许您设置断点,设置其他环境变量(如NSZombieEnabled
)等。
如果您只想调试特定套件或特定单元测试,可以将-SenTest All
参数更改为-SenTest MyUnitTestSuite
或-SenTest MyUnitTestSuite/myUnitTestMethod
。
答案 3 :(得分:2)