初心者向けに、CppUnitの使用について説明している優れた本やオンラインサイトはありますか?
5 に答える
ユニットテストを使い始めるときは、100%のカバレッジを目指しないでください。そうすれば、狂気に陥ります。
クラス内のすべての主要なメソッド(ぶら下がっている果物)をカバーするようにしてください。
( UnitTest ++を介して)単体テストを開始したとき、私は完全なカバレッジを求め、プライベート保護されるべきメソッドを作成し、ラッパークラスを使用してそれらをテストできるようにしました。Seamは機能するので、金属に近いクラスをテストできます。
ユニットテストに関する優れた本は、レガシーコードで効果的に機能することです。このコードは、その名前にもかかわらず、グリーンフィールドの開発についても説明しており、よく書かれており、起動するための優れた例があります。
更新:また、テストを作成するときに、最初にすべての可能性をカバーすることについてあまり心配しないでください。あなたはいくつかのものを逃すでしょう。私はかつて合格したテストを持っていましたが、ライブコードはその関数でクラッシュしました。テストを通じて入力を実行すると、何が問題であるかが示され、すべてのテストに合格するように関数を書き直すことができました。元のテストは、顧客(残念ながら私にとって)がバグを発見する前に、約7〜8か月間強力でした。
これらのリンクは役に立ちますか?
単体テストでは、一度に1つのメソッドでクラスを分離してテストできます。
基本的に、テストケースは、テスト対象のクラスとそれが依存するクラスの1つのインスタンスを作成し、1つのメソッドを呼び出し、そのメソッドがアサーションで期待どおりに機能することを確認します。
単体テストを実現するための優れた方法は、テスト駆動開発(TDD)です。この場合、単体テストはコードの前に記述されます。これは最初は奇妙に聞こえるかもしれませんが、これにより、テスト可能な(そしてテストされた)コードを取得できます。コードを最初に記述した場合、簡単にテストできない可能性があります。
TDDプロセスは次のとおりです。
赤:失敗するテストを書く緑:合格するのに十分なコードを書くリファクタリング:コードをクリーンアップし、重複を削除する
CppUnitが最も広く使用されているかどうかはわかりません。これはjUnit(Javaフレームワーク)の移植版ですが、かなり重いです。簡略化されたバージョンが存在します:CppUnitLite、NanoCppUnit、およびCxxtest、Boost.Test、TUT 。ウィキペディアのこのリストを参照してください。CppUnitに縛られていない場合は、それらを比較する記事があります。
私が「インスピレーション」のために頼った本は、マイケル・フェザーズによるレガシーコードで効果的に働いていました。彼はCppUnitの著者であり、大きなレガシープロジェクトに単体テストを追加するのに役立つ方法としてこの本を書きました。新しいプロジェクトを始めたばかりの場合、それはあまり役に立たない可能性がありますが、ユニットテストを古いプロジェクトに取り込もうとしている場合、彼は多くの優れたアイデアを持っています。
既存のプロジェクトをリファクタリングしようとする際の本当の問題は、経営陣から前進することです。彼らにとって、認識された利益がない場合(新機能がない、コードを変更するリスクがある)、彼らはそれが費用の価値がないと考えるかもしれません。あなたは彼らに本当の利益(品質の向上、新しいコードの追加のしやすさなど)を売り込むために一生懸命努力しなければならず、結局彼らはそれが価値がないと判断するかもしれません。
GerardMeszarosによるxUnitテストパターンをピックアップしました。実際に昨日届いたので、最初の数章を読んだだけで、まだ完全にはお勧めできません。しかし、これまでのところ、自動化された単体テストの作成者の哲学について適切なアドバイスを提供しており、それはあなたが探しているようなものかもしれません。