1

テスト ケース用の nUnit の Category 属性と同等の関数が必要です。

多数の C++ テスト ケースを継承しました。その一部は単体テストであり、一部は実行時間の長い統合テストであり、統合テスト ケースを無視するように継続的統合ビルド プロセスを設定する必要があります。

すべての統合テスト ケースにタグを付けて、CI ビルド中にそれらを除外するように cppunit に指示することをお勧めします。

私は cppunit の機能を見落としていますか、それともこれを実現する別の方法はありますか?

4

1 に答える 1

3

ネイティブのテストカテゴリ属性はありません。CppUnitはそれよりも少し単純です。CppUnitには、アプリのコマンドラインテストランナーも付属していません。TestRunnerを実行する独自の単純なmain()関数を作成する必要があります。

これが標準的な例です。

#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>

int main( int argc, char **argv)
{
  CppUnit::TextUi::TestRunner runner;
  CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry();
  runner.addTest( registry.makeTest() );
  bool wasSuccessful = runner.run( "", false );
  return wasSuccessful;
}

TestSuiteは、TestCaseのコレクションです。TestRunnerは、TestSuiteのコレクションを実行します。この例では、TestFactoryRegistryからTestSuiteを取得します。これは、CPPUNIT_TEST_SUITE_REGISTRATION(MyTestSuite)へのマクロ呼び出しを使用して入力します。しかし、TestCaseはまだあなたのテストクラスです。

ファサードを持つクラスを拡張するのと同じように、これらの属性を自分で実装することはできます。TestSuiteから新しいクラスを取得します。選択できる属性をテストに追加してから、「単体テストのみ」や「統合テストのみ」など、必要なものを実行するTestRunnerにデータを入力します。

さらに言えば、TestRunnerは名前に基づいて実行するテストを選択できます。すべての統合テストにITFoo、ITBarなどのプレフィックスを付けて名前を付けた場合、「IT」で始まるすべてのテストを選択できます。

問題を解決する方法はたくさんありますが、自分で解決する必要があります。ユニットテストに値するコードを書くことができれば、それはあなたにとって大したことではないはずです。:-)

于 2011-11-12T02:33:19.773 に答える