unittest++ のコンパイル中にエラーが発生しました

unittest++ のコンパイル中にエラーが発生しました

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/- しかし、プロジェクトのメンテナーは最近あまり活動していないようです。

関連情報