我有以下愚蠢的简单测试用例(在带有对应 .h 文件的 .mm 文件中定义)。它使用 boost 尝试从 stringstream 中读取 ptree 以模拟文件中的文本。
-(void)setUp {
printf("setup\n");
::std::stringstream ss;
ss << "bad format text";
_configuration = new ptree();
::boost::property_tree::read_json(ss, *_configuration);
}
tearDown 函数什么都不做,并且有一个测试用例也什么也不做。如果我注释掉 read_json 行,一切正常。但如果我按原样运行它,我会得到:
Test Case '-[TestPlanner testPlanner]' started.
libc++abi.dylib: terminate called throwing an exception
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include: line 415: 3320 Abort trap: 6 "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}"
/Applications/Xcode.app/Contents/Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/Developer/usr/bin/otest' exited abnormally with code 134 (it may have crashed).
真正疯狂的是,如果我在 SetUp 函数中设置断点,它甚至都不会运行!这是唯一启用的测试,因此即使没有运行单个测试的任何一行,也会发生崩溃。我知道测试设置正确,因为如果我注释掉 read_json 行并设置断点,它确实会到达,我可以在测试用例中包含一些断言,它们会按预期工作。
这也不仅仅是一个提升问题。我最初在从我自己的项目中调用不同的库时遇到了这个问题,但为了简化一切,我只使用了这个 boost 调用。这个完全相同的调用发生在代码的其他部分,所以我很确定我已经正确链接了 boost。我对命名空间非常冗长,所以我认为我没有链接错误版本的函数或其他东西。
我正在运行 XCode 4.5(但在 4.4.1 上有同样的问题)并尝试使用 OCUnit 编写单元测试。我正在处理的项目已经在这个框架中编写了一些单元测试,并且这些测试的所有内容似乎都运行良好。
我是 Objective C 和 XCode 的新手,但是设置这个项目的人肯定不是,他看不出我所做的有任何问题,我们都被难住了。
谢谢阅读!如果您需要更多信息,请告诉我。