![]() Boost Test Library: Test Tools Introduction BOOST_CHECKPOINT Example and Test Programs Introduction Boost Test Library の Test Tools はテス
トプログラムの作成と保守を容易にするためのツール群を提供する。このツー
ル群はマクロと関数宣言という形で提供されている。これらの関数を直接呼
び出すこともできるが、Test Toolsを使うには通常、使い易いマクロを介し
て行われる。マクロ引数はすべて1回だけ計算され、複雑な式も安全に渡す
ことができる。マクロを使用することにより、エラーが発生した場合その
ファイル名・行番号を出力する。Boost Test Library のTest Tools はライ
ブラリは製品プログラム向けというよりはテストコード用のものであり、エ
ラーを検知して報告するには、例外の発生、assert()または
BOOST_STATIC_ASSERT()の使用などが適している。 BenefitsTest Tools を使用することによりテストプロ グラムを簡単に作成でき、その上統一形式でエラーを報告できる。 SpecificationBOOST_CHECKPOINT( message )このテストツールはテストの流れに、チェックポイントで印を付けるときに使用する。チェックポイントを付けることにより、ランタイム例外の起きた場所を探し出す時に便利である。 Example: test.cppint test_main( int, char* [] ) { BOOST_CHECKPOINT( "Going to throw an exception" ); throw "some error"; return 0; } Output: Exception in test_main : C string:some_error ![]() BOOST_WARN( predicate )このテストツールは述語の弱い検証を行う場合に使用する。述語が真である場合テストツールは確認メッセージを出力する。それ以外の場合"warning in ...: condition <predicate> is not satisfied"のような形式で警告メッセージを出力する。 Example: test.cppint test_main( int, char* [] ) { BOOST_WARN( sizeof(int) == sizeof(short) ); return 0; } Output:test.cpp(2) : warning in test_main: condition sizeof(int)
== sizeof(short) is not satisfied BOOST_CHECK( predicate )このテストツールは述語値を検証する場合に使用する。述語が真である場合テストツールは確認メッセージを出力する(テスト出力ストリームに出力されるメッセージをうまく処理することで、適切なログレベルを設定できる。以降注意すること)。それ以外の場合エラーメッセージを"error in ...: test <predicate> fail" のような形式で出力する。 Example: test.cppint test_main( int, char* [] ) { int i=2; BOOST_CHECK( i == 1 ); return 0; } Output:test.cpp(3) : error in test_main: test i==1 failed BOOST_CHECK_EQUAL( left, right )BOOST_CHECK( left == right ) と同じ。このテストツールを使用することにより、2つの値の不一致を検出できる。 Example: test.cppint test_main( int, char* [] ) { int i = 2; int j = 1; BOOST_CHECK_EQUAL( i, j ); return 0; } Output: test.cpp(4) : error in test_main: test i == j failed [2 !=
1] BOOST_CHECK_CLOSE( left, right, tolerance_src )このテストツールは、close_at_tolerance( tolerance_src )記述で定義された、leftとright の強関連性について検証する。弱関連性の検証を行う場合には、 BOOST_CHECK_PREDICATEを使う。 floating_point_comparison.hpp を自分でインクルードする必要があることに注意せよ。テストツールはこのファイルに依存しているが、コード依存度を最小化するため、敢えてインクルードをしていない。 Example: test.cppint test_main( int, char* [] ) { double v1 = 1.23456e-10; double v2 = 1.23457e-10; BOOST_CHECK_CLOSE( v1, v2, 1e-6 ); // 与えられた許容範囲を越えた場合、失敗 return 0; } Output:test.cpp(4) : error in test_main: test v1 (==) v2 failed [1.23456e-10 != 1.23457e-10 (1e-06)] Example: test.cppint test_main( int, char* [] ) { double v1 = 4.1; v1 = v1 * v1; BOOST_CHECK_CLOSE( v1, 16.81, 1+2 ); // 1(算術演算) + // 2(10進数から2進数への変換) - // 丸め誤差数; 成功するはず return 0; } Output:
BOOST_REQUIRE( predicate )このテストツールは述語値を検証する場合に使用する。述語が真である場合、テストツールは確認メッセージを出力する。それ以外の場合、エラーメッセージを" fatal error in ...: test <predicate> fail" とう形式で出力し、そのテストケースプロセスを中断する。 Example: test.cppint test_main( int, char* [] ) { int i = 3; BOOST_REQUIRE( i > 5 ); BOOST_CHECK( i == 6 ); // ここには到達しない return 0; } Output:test.cpp(3) : fatal error in test_main: test i>5 failed
BOOST_MESSAGE( message )このテストツールは、テスト出力ストリームにメッセージを出力する場合に使用する。メッセージ引数としては、あらゆる型、またはそれらを<<を使って連結したものが有効である。 Example: test.cppstruct A { friend std::ostream& operator<<( std::ostream& str, A const& a ) { str << "struct A"; return str; } }; int test_main( int, char* [] ) { BOOST_MESSAGE( "Starting test" ); int i = 2; BOOST_MESSAGE( "i=" << i ); BOOST_MESSAGE( "still testing..." ); struct A a; BOOST_MESSAGE( a << '.' ); return 0; } Output:Starting test ![]() BOOST_WARN_MESSAGE( predicate, message )
|
古いツール | 代わりとなるツール |
BOOST_TEST( predicate ) | BOOST_CHECK( predicate ) |
BOOST_CRITICAL_TEST( predicate ) | BOOST_REQUIRE( predicate ) |
BOOST_CRITICAL_ERROR( message ) | BOOST_FAIL( message ) |
これらの変更の主な理由は、記述の簡潔性と統一性のためである。古い推奨されない名前でもかまわないが、将来のリリースで削除されることがある。新しい名前を提案してくれたUllrich Koetheに感謝する。
test_exec_example.cpp
test_exec_fail2.cpp
test_exec_fail3.cpp
test_tools_test.cpp
Boost Test Library Design ドキュメントはBoost Test Library コンポーネント間の関係について記述している。