2009-04-22 7 views
2

C++ unittestingにはCppUnitboost::testの両方を使用しました。一般的に、私はboost::testを好んでいます。主に自動テストマクロはテストのセットアップにかかる労力を最小限に抑えるからです。しかし、私が本当に逃しているのは、CppUnitです:あなた自身の "プロテクター"を登録する能力、そのインスタンスは自動的にすべてのテストをラップします。 (技術的には、テスト「リスナー」をインストールし、各テストをプロテクタースコープにラップすることができます)。boost :: testのCppUnitプロテクタに相当しますか?

ユニットテストで予期しない副作用が発生したことを監視していたことは、これまで非常に貴重でした(たとえば、チェックコードが浮動小数点ユニットの状態フラグを変更していないなど)。私はboost::testdocumentationに相当するものは見当たりませんが、BOOST_FIXTURE_TEST_CASEはおそらく最も近いでしょう。

boost::testでCppUnitのプロテクターと同じことを達成するにはどうすればよいですか?

(まだ私はboost::testの実装をまだ見ていませんが、それがCppUnitのようなものなら、それはプロテクター自体のようなものを使用しなければなりません)。

答えて

2

私はCppUnitを一度も使用していないので、プロテクターがどのように機能するのかよくわかりません。あなたは個々のテストを包むもの、あるいはテストスイート全体を探していますか?

前者について言えば、備品を使用することができますが、私が理解しているように、備品はテストの「外」と見なすべきです。テストに必要なものをセットアップし、後でそれを整えます。どのような実際のエラーテストもテスト自体にあるべきですが、RAIIで簡単に実装できます。デストラクタで必要なものをチェックするクラスを定義してから、テストの開始時にローカルインスタンスを作成します。最初に構築されるので、最後に破壊されるので、テストが予期しない状態を変更していないことを簡単にチェックできます。あなたはそれがすべてのテストが実行されている後にこれをチェックしたい場合、あなたはおそらくglobal fixtures

+0

のCppUnitのリスナー/プロテクターは、中(または周りに)あなたにRAIIスコープ検査の利便性を与えたい

各テストが、なしそれぞれのテストにコードの行を退屈に追加する必要があります。グローバル・フィクスチャーへのポインタありがとうございました。各テスト実行でctor/dtorが呼び出された場所があれば完璧ですが、BOOST_AUTO_TEST_CASEをすべてBOOST_FIXTURE_TEST_CASEでグローバル置換しないでプロテクターのようなものを構築することなく付属の什器をチェックするのが最善の策だと思われます。 – timday

+0

ああ、私はそれを得ると思います。このRAIIオブジェクトをテストごとに明示的に指定しなくても、すべてのテストスイートに1つのテストケースをラップすることができますか? 私のベスト・ベットは、最初の行にプロテクター・オブジェクトを挿入してBOOST_FIXTURE_TEST_CASEに展開する簡単なラッパー・マクロです。 – jalf

+0

興味深い考えですが、役に立つ追加のように聞こえます。 Boostライブラリの著者にお気軽にお寄せください; – jalf

関連する問題