Boost logo

Boostテストライブラリ: ミニマルテスト

イントロダクション
メリット
サンプル
ツール
統合
テストプログラム
設計

イントロダクション

Boost.Test ミニマルテストは、オリジナルのBoost.Test と同じ機能を提供する。 テスト実行モニターと同様に、 監視環境の中でテストプログラムを実行するものである。 さらに、ミニマルテストはテストツールで定義された いくつかのシンプルなテストツールと同じように動作するいくつかのツールを定義する。 ミニマルテストは他の外部コンポーネントとリンクする必要がないので、シンプルで すばやいテストを行うときに選択することができる。 オリジナルのBoost.Testとは異なり、BOOST_INCLUDE_MAINマクロは使用されない。 main関数は条件なしにインクルードされる。そのため、ミニマルテストは複数の ユニットで構成されるテストに使用することはできない。このような場合にはBoost.Test の他のコンポーネントを使用する必要がある。

Benefits

これは外部コンポーネントをリンクする必要の無い、 シンプルなテスト環境と最小セットのテストツールを提供する。

Example

#include <boost/test/minimal.hpp>

int add( int i, int j ) { return i+j; }

int test_main( int, char *[] )             // 名前に注意
{
    // six ways to detect and report the same error:
    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++エキスパートはエラーの通知に例外を使用するので、既存のコードを reference to the top

提供されているテストツール

テストツール内のテストツールを すべて実装したテスト実行モニターとは異なり、 ミニマルテストは以下の4つのツールのみをサポートする。

BOOST_CHECK( predicate )
BOOST_REQUIRE( predicate )
BOOST_ERROR( message )
BOOST_FAIL( message )

これらのツールの動作はTest Tollsコンポーネントで定義された とのと同じである。詳細はリンク先の情報を参照すること。 古いBoost.Testのツール名もサポートされるが、将来非推奨になる。

統合

boost/test/minimal.hppをインクルードするのを除けば、テストモジュールと ミニマルテストを統合するためにはmain関数のシグニチャを変更するだけである。 これは以下のようにする:

int test_main( int argc, char* argv[] )

この変更をしたら、テストはモニタ環境で自動的に実行される。また、ミニマルテスト で提供されているテストツールを使用したり、結果のレポートが表示されるようになる。

テストプログラム

minimal_test.cpp

設計

reference to the top

Boostテストライブラリ設計 ドキュメントはBoostテストライブラリコンポーネント間の関係を記述している。