我有以下愚蠢簡單的測試用例(在具有相應的.h文件的.mm文件中定義)。它使用boost來嘗試從stringstream中讀取一個ptree來模擬文件中的文本。XCode OCUnit與中止陷阱崩潰:6在任何測試代碼運行之前
-(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).
真正瘋狂的事情是,如果我在設置功能中設置斷點,它甚至不運行!而且這是唯一啓用的測試,所以即使沒有運行單一測試的一行,也會崩潰。我知道測試的設置是正確的,因爲如果我註釋掉read_json行並設置一個斷點,它已經達到了,並且我可以在測試用例中包含一些斷言,並且它們按預期工作。
這不僅僅是一個助推器問題。我最初在從我自己的項目中調用不同的庫時遇到過這個問題,但是爲了簡化所有我簡單介紹的內容,只是簡單介紹一下這個boost調用。這個完全相同的調用發生在代碼的其他部分,所以我很確定我的boost已正確鏈接。我對命名空間超級冗長,所以我不認爲我連接了錯誤版本的函數或其他東西。
我正在運行XCode 4.5(但在4.4.1上有同樣的問題)並嘗試使用OCUnit編寫單元測試。我正在開發的這個項目已經在這個框架中編寫了一些單元測試,並且這些測試的一切似乎都正常。
我是Objective C和XCode的新手,但將此項目明確設定的人並不是,他看不出我在做什麼的任何問題,而且我們都完全陷入困境。
感謝您的閱讀!讓我知道你是否需要更多信息。