
我正在 MacOS maverick 上安裝 unittest++,並遇到此編譯錯誤:
src/tests/TestXmlTestReporter.cpp
src/tests/TestCurrentTest.cpp
Linking TestUnitTest++...
Running unit tests...
:107: error: Failure in test: Expected 2 but was 0
FAILURE: 1 out of 174 tests failed (1 failures).
如何解決這個問題?我使用舊版的 MacOS 沒有問題。
答案1
我遇到了這個。看來UnitTest++測試程式碼有錯誤。它在 src/tests/TestTestRunner.cpp 中實作了許多模擬測試,但它們的 Test::RunImpl() 簽章都是錯的。 RunImpl 不需要參數,但模擬測試的 RunImpl 提供對 TestResults 物件的參考。
例如,在 TestTestRunner.cpp 的 l25 上:
virtual void RunImpl(TestResults& testResults_) const
{
for (int i=0; i < count; ++i)
{
if (asserted)
ReportAssert("desc", "file", 0);
else if (!success)
testResults_.OnTestFailure(m_details, "message");
}
}
但因為簽名不匹配,所以應該是:
virtual void RunImpl() const
{
TestResults* testResults_ = CurrentTest::Results();
for (int i=0; i < count; ++i)
{
if (asserted)
ReportAssert("desc", "file", 0);
else if (!success)
testResults_->OnTestFailure(m_details, "message");
}
}
所以解決方法就是用類似的方式來修復所有的RunImpl。
我不確定它為什麼/如何在早期的 OSX 平台上成功編譯和運行。
更新:解決這個問題後,我發現實際上有一個開放的票證:http://sourceforge.net/p/unittest-cpp/bugs/23/- 但專案維護者最近似乎不太活躍。