編譯單元測試++時出錯

編譯單元測試++時出錯

我正在 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/- 但專案維護者最近似乎不太活躍。

相關內容