Boostテストライブラリ: ミニマルテスト イントロダクション イントロダクションBoost.Test ミニマルテストは、オリジナルのBoost.Test と同じ機能を提供する。 テスト実行モニターと同様に、 監視環境の中でテストプログラムを実行するものである。 さらに、ミニマルテストはテストツールで定義された いくつかのシンプルなテストツールと同じように動作するいくつかのツールを定義する。 ミニマルテストは他の外部コンポーネントとリンクする必要がないので、シンプルで すばやいテストを行うときに選択することができる。 オリジナルのBoost.Testとは異なり、BOOST_INCLUDE_MAINマクロは使用されない。 main関数は条件なしにインクルードされる。そのため、ミニマルテストは複数の ユニットで構成されるテストに使用することはできない。このような場合にはBoost.Test の他のコンポーネントを使用する必要がある。 メリットこれは外部コンポーネントをリンクする必要の無い、 シンプルなテスト環境と最小セットのテストツールを提供する。サンプル#include <boost/test/minimal.hpp> int add( int i, int j ) { return i+j; } int test_main( int, char *[] ) // 名前に注意 { // 同じエラーを6通りの方法で検出する: BOOST_CHECK( add( 2,2 ) == 4 ); // #1 エラー時も実行を続ける BOOST_REQUIRE( add( 2,2 ) == 4 ); // #2 エラー時に例外を送出 if( add( 2,2 ) != 4 ) BOOST_ERROR( "Ouch..." ); // #3 エラー時も実行を続ける if( add( 2,2 ) != 4 ) BOOST_FAIL( "Ouch..." ); // #4 エラー時に例外を送出 if( add( 2,2 ) != 4 ) throw "Oops..."; // #5 エラー時に例外を送出 return add( 2, 2 ) == 4 ? 0 : 1; // #6 エラーコードを返す } Approach #1 BOOST_CHECKを使用して、失敗した文、ソースファイル名、行数 を含むエラーメッセージをstd::coutに表示する。BOOST_CHECKはエラーカウントを増やす。 プログラムが終了したときに、ミニマルテストが自動的にエラーカウントを表示する。 Approach #2 BOOST_REQUIREを使用した。これはエラー表示後の動作以外は#1と 似ているが、エラーが発生すると、例外が投げられ、ミニマルテストがそれをキャッチする。 この方法は厳格なテストや、エラーが発生するとその後のテストの意味がなくなるときに 便利である。C++標準ライブラリのassert()マクロとは異なり、常に生成されてミニマルテスト のエラー検地レポート機能が使用される。 Approaches #3 and #4 エラー検知コードが分離されている以外はそれぞれ #1, #2と同じである。これはテストを行った条件の中で、失敗した理由が分かりづらい 時に便利である。 Approach #5 例外を投げるとミニマルテストがキャッチする。 これはライブラリの内外を問わず、製品コードとテストコードの両方で使用すること ができる。例外がキャッチされると、もしその例外がstd::exceptionから導出されて いた場合、あるいはchar*型、std::stringだった場合にはエラーメッセージが表示され る。 Approach #6 返り値は呼び出し側にエラーを通知するのに使用する。
このアプローチはテストツールライブラリを用いた既存のテストコードと統合
するのに適している。ミニマルテストライブラリではこれはうまく動くが、
C++エキスパートはエラーの通知に例外を使用するので、既存のコードを
提供されているテストツールテストツール内のテストツールを すべて実装したテスト実行モニターとは異なり、 ミニマルテストは以下の4つのツールのみをサポートする。 BOOST_CHECK(
predicate ) これらのツールの動作はTest Tollsコンポーネントで定義された とのと同じである。詳細はリンク先の情報を参照すること。 古いBoost.Testのツール名もサポートされるが、将来非推奨になる。 統合boost/test/minimal.hppをインクルードするのを除けば、テストモジュールと ミニマルテストを統合するためにはmain関数のシグニチャを変更するだけである。 これは以下のようにする: int test_main( int argc, char* argv[] ) この変更をしたら、テストはモニタ環境で自動的に実行される。また、ミニマルテスト で提供されているテストツールを使用したり、結果のレポートが表示されるようになる。 テストプログラム設計
Boostテストライブラリ設計 ドキュメントはBoostテストライブラリコンポーネント間の関係を記述している。 |