2

と の両方を C++ 単体テストに使用CppUnitboost::testました。boost::test主に、自動テスト マクロがテストをセットアップする労力を最小限に抑えるためです。しかし、私が本当に見逃していることが 1 つありCppUnitます。それは、実行されたすべてのテストを自動的にラップするインスタンスである、独自の「プロテクター」を登録する機能です。(技術的には、テスト「リスナー」をインストールすると、各テストをプロテクタースコープにラップできます)。

私は過去に、ユニットテストの予期しない副作用を監視するために、これらが非常に貴重であることを発見しました (たとえば、コードをチェックしても浮動小数点のユニット状態フラグが変更されていないなど)。boost::test おそらく最も近いかもしれませんが、ドキュメンテーションには同等のものはありBOOST_FIXTURE_TEST_CASEません。

で CppUnit のプロテクターと同じことを達成するための最良の方法について何か提案はありboost::testますか?

boost::test(の実装についてはまだ詳しく調べていませんが、そのようなものであればCppUnit、プロテクター自体に非常によく似たものを使用する必要があります)。

4

1 に答える 1

2

私は CppUnit を使ったことがないので、プロテクターがどのように機能するかわかりません。個々のテストをラップするもの、またはテスト スイート全体をラップするものをお探しですか?

前者の場合、言及したようにフィクスチャを使用できますが、私が理解しているように、フィクスチャはテストの「外部」と見なす必要があります。テストに必要なものは何でもセットアップし、後でクリーンアップします。実際のエラー テストはテスト自体に含まれている必要がありますが、RAII を使用すると簡単に実装できます。デストラクタで必要なものをすべてチェックするクラスを定義し、テストの開始時にそのローカル インスタンスを作成するだけです。最初に構築され、最後に破棄されるため、テストによって予期しない状態が変更されていないことを簡単に確認できます。

すべてのテストが実行された後にこれをチェックしたい場合は、おそらくグローバルフィクスチャが必要です

于 2009-04-22T23:00:45.013 に答える