6

BOOST のアサーションの失敗に関するデータをもう少し記録したいと思います。これが可能かどうか、またその方法がわからない。

BOOST_AUTO_TEST_CASE( TestCase1 )
{
    Data d;

    d.fillUp(...);

    d.operation1(...);
    BOOST_CHECK(d == ...);

    d.operation2(...);
    BOOST_CHECK(d == ...);

    ...

    if( /* anything above failed */)
    {
        log << d;
    }
}

最後の条件に問題があります。アドバイスできますか?アサーションが発生したときの Data オブジェクトの状態を示すエラー ログが必要です。テストケースで複数のアサーションが発生した場合でも、理想的には一度ダンプされることを望みます。

4

1 に答える 1

5

私はあなたが望むものを達成するために次のことをしています:

BOOST_CHECK_MESSAGE( current_test_passing(), d);

テスト ヘルパー関数のコレクションに追加したばかりの次の関数を使用します。

#include <boost/test/results_collector.hpp>

inline bool current_test_passing()
{
  using namespace boost::unit_test;
  test_case::id_t id = framework::current_test_case().p_id;
  test_results rez = results_collector.results(id);
  return rez.passed();
}

BOOST_REQUIRE_ と組み合わせてループに役立つことがわかったので、すべてのチェックに「i =」メッセージを追加しなくても、多くのチェックのいずれかが失敗している特定の繰り返しをすばやく確認できます。

for (int i=0; i < HUGE_NUMBER; ++i) {
  … many checks …
  BOOST_REQUIRE_MESSAGE( current_test_passing(), "FAILED i=" << i );
}
于 2014-02-28T18:20:39.450 に答える