web-dev-qa-db-ja.com

C ++単体テストフレームワーク

私はC++コードにBoostテストフレームワークを使用しますが、おそらくすべてのC++テストフレームワークに共通する2つの問題があります。

  • (たとえば、選択したクラスからパブリック関数を抽出することにより)自動テストスタブを作成する方法はありません。
  • 単一のテストを実行することはできません-テストの「スイート」全体を実行する必要があります(多くの異なるテストプロジェクトを作成しない限り)。

誰もがより良いテストフレームワークを知っていますか、それとも私は永遠にJava/.NET開発者が利用できるテストツールにjeしていますか?

61
Rob

非常によく似た質問 に答えました。最終的にはNoel LlopisのUnitTest ++を使用しました。 boost :: testよりも気に入ったのは、テストハーネスのメインプログラムをマクロで実装することを要求しなかったためです。作成した実行可能ファイルにプラグインできます。 boost :: testと同じ厄介な問題があります。リンクするライブラリが必要です。CxxTestを使用しましたが、テストを自動生成するにはC++-landの他のどの製品よりも近くなります(Perlが必要です)これを行うためにビルドシステムの一部になります)。 C++は、.NET言語およびJavaが提供するリフレクションフックを提供しません。VisualStudio Team System-Developer's EditionのMsTestツールは、アンマネージC++のテストスタブを自動生成しますが、これを行うにはDLLからエクスポートする必要があるため、静的ライブラリでは動作しません。NETの世界の他のテストフレームワークにもこの機能があるかもしれませんが、私はよく知りません。そのため、現在、アンマネージC++にはUnitTest ++を使用しており、現在、マネージライブラリにはMsTestとNUnitを選択しています。

20
Brian Stewart

独自のフレームワーク [〜#〜] catch [〜#〜] をプッシュしたところです。まだ開発中ですが、他のほとんどのフレームワークをすでに上回っていると思います。人によって基準は異なりますが、トレードオフをあまりせずにほとんどの領域をカバーしようとしました。リンクされたテイスターのブログエントリをご覧ください。私の上位5つの機能は次のとおりです。

  • ヘッダーのみ
  • 機能および方法ベースのテストの自動登録
  • 標準のC++式をLHSおよびRHSに分解します(したがって、アサートマクロのファミリ全体は必要ありません)。
  • 関数ベースのフィクスチャ内のネストされたセクションのサポート
  • 自然言語を使用した名前テスト-関数/メソッド名が生成されます

スタブの生成はdoes n'tではありませんが、それはかなり特殊な領域です。 Isolator ++ は、それを本当に実現した最初のツールだと思います。モック/スタブフレームワークは、通常、ユニットテストフレームワークから独立していることに注意してください。 CATCHは、テスト状態がコンテキストによって渡されないため、モックオブジェクトで特にうまく機能します。

また、Objective-Cバインディングもあります。

[更新]

数年前から私のこの答えに出会ったばかりです。すべての素晴らしいコメントをありがとう!明らかに、Catchはその時代に大きく発展しました。現在、BDDスタイルのテスト(指定された/いつ/の場合)、タグ、singleヘッダー、および内部改善と改良(例えば、より豊富なコマンドライン、明確で表現力豊かな出力など)。 最新のブログ記事はこちらです

66
philsquared

Google C++ Testing Frameworkをご覧ください。

Googleが社内のすべてのC++プロジェクトに使用しているため、かなり優れているはずです。

http://googletesting.blogspot.com/2008/07/announcing-new-google-c-testing.html

http://code.google.com/p/googletest

23
J Miller

Boost.Testでは、テストケースを名前で実行できます。またはテストスイート。またはそれらのいくつか。

Boost.Testは、mainの実装を要求しませんが、mainの実装を簡単にします。

Boost.Testは、ライブラリとして使用する必要はありません。単一のヘッダーバリアントがあります。

22
user49248

私は nitTest ++ の大ファンです。非常に軽量ですが、仕事はします。そこで簡単に単一のテストを実行できます。

8
yrp

いい質問です!数年前、私は使用する価値のあるものを永遠に探し回り、不足しました。私は非常に軽量で、いくつかのライブラリにリンクする必要のないものを探していました...あなたが知っている数分で立ち上がって実行できるものを知っています。

しかし、私は持続し、 cxxtest を越えて実行することになりました。

ウェブサイトから:

  • RTTIを必要としません
  • メンバーテンプレート関数は必要ありません
  • 例外処理を必要としません
  • 外部ライブラリ(メモリ管理、ファイル/コンソールI/O、グラフィックライブラリを含む)を必要としません
  • 完全にヘッダーファイルのセットとして配布されます(およびpythonスクリプト)。

すごい...超シンプル!ヘッダーファイルをインクルードし、Testクラスから派生すれば、すぐに実行できます。私たちは過去4年間これを使用してきましたが、まだ満足できるものをまだ見つけていません。

6
Scott Saad

WinUnit を試してください。それは素晴らしいように聞こえ、 John Robbins によって推奨されています。

4
Steve Duitsman

Boost単体テストフレームワークが気に入っています。これは主に非常に軽量だからです。

  • スタブを生成する単体テストフレームワークについて聞いたことがありません。コード生成が非常にすぐに時代遅れになるからという理由だけで、私は一般的にコード生成にまったく納得しません。たくさんのクラスがあるときに役立つかもしれませんか?

  • テスト駆動開発の支持者は、回帰を導入していないことを確認するために、テストスイート全体を毎回実行することが基本であるとおそらく言うでしょう。すべてのテストの実行に時間がかかりすぎる場合、テストが大きすぎるか、またはモックアウトする必要があるCPU集中型の関数を何度も呼び出していますか?それでも問題が解決しない場合は、ブーストユニットテストの薄いラッパーでテストを選択できます。おそらく、別のフレームワークを学習してすべてのテストを移植するよりも高速です。

3
small_duck

Aeryn は、見る価値のあるもう1つのフレームワークです

2
David Sykes

http://groups.google.com/group/googletestframework 、しかしそれはかなり新しい

2
Ray Tayek

Visual Studioには、単体テストフレームワークが組み込まれています。これは、win32コンソールアプリケーションのテストプロジェクトをセットアップするための優れたリンクです。

http://codeketchup.blogspot.ie/2012/12/unit-test-for-unmanaged-c-in-visual.html

静的なDLLプロジェクトで作業している場合、他の人がGTestやBoostのような外部テスティングフレームワークに追加機能があることを指摘しているので、セットアップがはるかに簡単です。

2
dvn

tut-framework を使用しています

2
gtjthm

CppUnit は、JUnitに対する最初のオマージュでした。

1
duffymo

Eclipse/JUnitはJavaの堅牢なパッケージであり、C++の拡張機能と同等の機能が両方あります。それはあなたが話していることをすることができます。もちろん、IDEを変更する必要があります...

0
Aaron

テスト関数を自動的にスタブアウトすることは、問題の開発環境(またはフレームワークのスクリプト)の機能になると思います。おそらくCodeGearのC++ Builderアプリケーションは、ユーザー関数のテストコードをすばやく生成します。

0
Kris Kumler

私もUnitTest ++のファンです。

思わぬ障害は、ソース配布にはほぼ40の個別のファイルが含まれていることです。これはばかげています。単純なプロジェクトのソース管理とビルドタスクの管理は、これらすべての単体テストファイルの管理によって支配されます。

UnitTest ++を変更して、1つの.hおよび.cppファイルを追加することでプロジェクトと統合できるようにしました。これを「かわいい」と呼んでいます。詳細は http://ravenspoint.com/blog/index.php?entry=entry080704-063557

元の質問で求められたように、テストスタブは自動的に生成されません。そのような機能は価値がある以上に厄介なものになると考えずにはいられず、膨大な量の無用なコードがアクセサー関数を「テスト」します。

0
ravenspoint

私は Igloo を試していますが、これもヘッダーのみのC++テストスイートです。2つの依存関係がヘッダーのみである場合でもです。

だから、それは非常に簡単で簡単です。 githubに含まれている例の他に、メインサイト igloo-testing.org に例と詳細があります。これと他のフレームワークの経験が増えたので、後でこれを更新します。

0
leetNightshade

Andrew MarlowのFructoseライブラリはチェックアウトする価値があります... http://fructose.sourceforge.net/

彼がフルクトースを書いた当時の他の提供物のかなり詳細な分析と比較を含んでいた彼の文書を思い出しますが、その文書への直接のURLを見つけることができません。

0
Tony Delroy