web-dev-qa-db-ja.com

最先端のC ++ユニットテスト?

C++言語の単体テストへの最新のアプローチは何ですか?より大きなイントロスペクション能力を備えた言語のクラス(Pythonなど)には、使用するのがより自然なユニットテストフレームワークがあります。単体テストはより簡単に定義できます。それに比べて、古典的なCppUnitJUnitに基づく)は非常に保守的なアプローチをとっているようです。 C++(またはC++ 11)の特定のパワーを使用して、生活を楽にする、より新しくてより良いものはありますか?

私はしばらくの間、WindowsネイティブC++(Visual Studio 2005および2010)のプロジェクトの一部にかなり単純な方法でCppUnitフレームワークを使用しています。既に多くのレガシーコードが存在していたため、テスト駆動開発アプローチを選択しませんでした。そのためのテストを追加するのは非常に難しいことがわかりました。アプリケーションをリファクタリングする必要がありましたが、すべてのNiceテストを追加すると、その場合でも時間がかかります。

最近、(C++ 11標準実装のため)Visual Studio 2013に切り替えました。新しい、かなり長期的なプロジェクトを開始する予定です。

ユニットテストの以前の良い(小さな)経験があるので、テスト駆動開発アプローチを試してみたいと思います。プロジェクトは小さなものではないので(予想されるサイズは古いプロジェクトとほぼ同じ、つまり約200 k行のコード)、私はむしろより簡単な(しかしそれほど劣らない)フレームワークを好みます。

新しいプロジェクトがクロスプラットフォーム実装につながる可能性があります(WindowsおよびLinux)。 Visual Studio 2013には単体テストのサポートがありますが、私はそれについての経験がなく、クロスプラットフォームにどのように適合しますか。

これまでのところ、 C++の単体テストフレームワークのリスト が見つかりました。ただし、原理的にどのように異なるかはわかりません。現在、3つの候補があります(保守的な選択)。

  • Boost-有望な候補; C++標準のテストベッド。したがって、広く受け入れられる可能性があります。おそらく最大のユーザーグループ。 CppUnitよりも進んでいるようです。
  • CppUnit-私はそれを知っていますが、周りのすべてのコードを書くのは楽しいことではありません。
  • Visual Studio 2013ビルトイン-私にとっては初めてですが、おそらく何らかの形でスケルトンを生成できます。

とにかく、3つすべてが同様のアプローチを使用しているようです。おそらくVS2013はコードの生成をサポートしていますが、それがより単純なものにつながることを意味するものではありません。

根本的に新しいアプローチはありますか?

49
pepr

考慮に値する唯一のテストフレームワーク: Catch

Libの概要については、 here および here も参照してください

使いやすく(ヘッダーが1つだけのヘッダーのみのライブラリ)、移植性があり、C++単体テストフレームワークの中で最もシンプルでクリーンな構文を備えています。

また、他のライブラリとは異なり、2ダースの異なるマクロfや異なるタイプのアサーションを覚える必要はありません。

REQUIREを使用するだけです:

int one = 1;
REQUIRE( one == 2 );

巧妙な演算子のオーバーロードにより、出力に元の式と展開された引数値の両方が表示されます。

test.cc(7): FAILED:
  REQUIRE( one == 2 )
with expansion:
  1 == 43

これと比較して、他のすべてのフレームワークはIMOを使用するのが面倒です。

私はこれを見つける前にBoost.Testを使用していましたが、それは多くのセットアップと使用が面倒でした。私たちは職場でCppUnitを使用していますが、それは可能な限り壊れやすく、痛みを伴うように設計されているようです。

VS2013テストフレームワークを簡単に見てきましたが、試していないため、許容できるように見えますが、「古いガード」をエミュレートしているようです。実際には、CppUnit、Boost.Test、およびCatchの前に登場した他のすべてのものよりも、クリーンで、簡単で、優れたものになることを目指していません。だから私はそれで気にしないと言うだろう。テストは簡単に記述(および理解)できる必要があり、Catchは、私がこれまでに目にした他のすべてのフレームワークよりも数年先を行っています。

51
jalf

テストフレームワークに組み込まれたVisual Studio 2013を約6週間使用しており、とても気に入っています。統合は優れており、非常に簡単に選択できます。 Windowsのみを対象とするプロジェクトに取り組んでいる場合は、徹底的にお勧めします。

4
Sean