web-dev-qa-db-ja.com

GoogleTest対CppUnit:事実

今後数年間のC++単体テストフレームワークを設定する過程で、GoogleTestおよびCppUnitを最終選考に入れました。私は両方の経験がありますが、私の好みはGoogleTestです。とにかく上司を説得するために、いくつかのfactsが必要なので、マニュアル、wikiページ、およびいくつかのソースを含む、インターネットでいくつかの読書をしました。 GoogleTestの利点と1つのCppUnitの利点(グラフィックテストランナー)のリストを思いつきました。ここでは、それらは知覚有用性の順に並べられています。

  • INSTANTIATE_TEST_CASE_Pを使用して、デカルト積などの必要なパラメーターセットを使用してテストケースをインスタンス化します。
  • プライベートクラスメンバーをテストするためのFRIEND_TEST(すべてのレガシーコード用)
  • アサートをブレークポイントに変える
  • 致命的ではないアサート
  • 「すぐに使える」googlemock統合
  • 自動テスト検出、それらを列挙する必要はありません
  • テストは無効化および有効化できます
  • 実行するテストは、名前パターンを使用して選択できます
  • 値/型パラメータ化テスト
  • ユーザー定義の述語アサート
  • 死のテスト
  • はるかに豊富なアサートセット
  • タイプアサート
  • サブルーチンのアサート
  • <<を使用して、追加のデバッグ情報をアサートに追加できます。
  • RecordPropertyは、プロパティの最後の値をXML出力に出力します
  • SCOPED_TRACEは、サブルーチンまたはループ内から発生するアサーションエラーのコンテキストを理解するのに役立ちます。
  • xUnit XML出力は、間にXSLT変換を行わなくてもJenkinsによってすぐに表示できます
  • カスタムタイプのプリンターをサポート
  • テストの表示に費やされる時間(これはCppUnitでも可能だと思いますが、まだわかっていません)
  • テストイベントリスナーAPI(ユーザー定義プラグイン)
  • テストシャッフル
  • 例外なし、RTTI

上記のすべてがCppUnitでサポートされていないと仮定するのは正しいですか?便利なGoogleTest機能はありますか使用不可 CppUnitにありませんか?

最後になりましたが、GoogleTest lacksのNice CppUnit機能はありますか?

ありがとう!

63
EstuansInterius

古いバージョンのgccコンパイラを使用している場合、またはテスト対象のコードがvxWorks(またはVxSim)で実行されている場合は、GoogletestフレームワークよりもcppUnitを使用する可能性が高くなります。

一方、googletestフレームワークのもう1つの機能は、3つの異なるレベルのセットアップ/分解の可用性です。

  • プログラムごと
  • テストケース(またはテストグループ)ごと
  • 個々のテストインスタンスごと

これがcppUnitでサポートされているかどうかはわかりませんが、特にレガシーシステムでは非常に便利です。

また、Eclipse CDT用のgoogletestプラグインがあります。

7
ratkok

これらは私が見る利点です。 GUIテストランナーがいくつかあります。

  1. https://github.com/ospector/gtest-gbar
  2. https://github.com/SandyChapman/gtest-runner-qt

私は最初のものを使用しましたが、それは開発中であり、いくつかの作業が必要ですが、かなりうまく機能します。他のオプションがあるかどうかわからない。

4
Brad W

xUnit ++ をご覧になっていない場合は、利用可能なもの(gtestを含む)に不満があるため、特に作成しました。リストのほとんどはサポートされていますが、サポートされていない場合、「必須」機能であれば、おそらく追加したいと思います。

4
moswald