11

Visual Studio 2005 (Professional) を使用した C++ の一般的な TDD と単体テストの使用経験について聞くことに興味があります。

最初にいくつかの背景。かなり大規模なプロジェクトがあり、その多くは単体テストに CppUnit を使用して Linux で開発されています。プロジェクトはいくつかのライブラリに分割されており、それぞれに独自のテスト セットがあります。ライブラリをコンパイルし、テストスイートをコンパイルしてからテストを実行する簡単なスクリプトがあります。したがって、コードを変更した後、コマンド ラインから "test" を実行すると、テストが実行されます。

現在、ほとんどの開発者は、この製品の開発に Windows 上の Visual Studio 2005 を使用しています。もちろん、nmake を使用してコマンド ラインからテストを実行することもできますが、追加の手順が必要になるため、より統合されたソリューションが必要です。

したがって、私の質問には 2 つの部分があります。

まず、大規模なコード ベースでテスト用のコードをレイアウトする最良の方法は何ですか? ライブラリごとに 1 つずつ、ソリューションに複数のテスト プロジェクトを作成するのは普通ですか?

次に、CppUnit テストを Visual Studio に統合するためのツールはありますか? 依存関係が正しく設定されている場合、テスト プロジェクトを正しく実行するとテストが実行されるはずですが、現在、結果はコマンド ウィンドウに表示されます。

4

7 に答える 7

3

私の会社のプロジェクトの 1 つがまさにこれを行っています。CXXTest ( http://cxxtest.sourceforge.net/guide.html )という単体テスト フレームワークを使用します。単体テストを含むヘッダー ファイルを作成するだけでよいため、C++ 用のこのフレームワークが非常に気に入っています。.CPP ファイルはスクリプトによって作成されます (Python スクリプトと Perl スクリプトの両方が提供されます)。

単体テストをビルドし (ビルドが必要な場合)、それらを実行するビルド後のステップを提供することで、Visual Studio と統合します。出力 (成功したものと失敗したものを示す) が出力ウィンドウに表示されます。IDE を終了する必要はありません。

于 2008-09-22T02:05:24.607 に答える
2
  • 次のフォルダ階層が便利だと思います。ProjectFolderのサブフォルダーとしてコードとテストを作成します。2つのソリューションcode\Project.slnとtests\Tests.slnを作成します。これで、作成されたすべてのクラスライブラリまたは実行可能ファイルに対して、たとえば、Customers.dllには対応するテストdllがあります。したがって、code \ Customers \ Customers.csprojには、前者を参照するtests \ Customers\TestCustomers.csprojがあります。
  • CPPUnitをVisualStudioに統合するには、プロジェクトのプロパティで適切なアプリケーションを選択する必要があります。「デバッグ」設定。このページには、IDE内でシングルキープレステストの実行とレポートを作成するために必要なものが含まれていると思います。
于 2008-09-22T03:14:39.243 に答える
2

Boost Test フレームワークを使用します。私は自分のコードを .lib ファイルに分割する傾向があり、それぞれに別のコンソール モード EXE テスト プロジェクトを用意します。テスト プロジェクトがビルドされると、'Post build stage' を使用して自身を起動し、テストを実行します。各テスト プロジェクトをメイン アプリケーションの依存関係にして、ビルドするたびにすべてのテストが最初に実行されるようにすることもできますが、これには時間がかかる場合があります。代わりに、必要に応じて手動でテスト プロジェクトを実行する傾向がありますが、自動化されたナイトリー ビルド システムは当然のことながらすべてのテスト プロジェクトを実行します (これをスクリプト化し、テストが失敗した場合、ビルドは失敗し、電子メール通知を受け取ります)。

詳細はこちら。

于 2008-09-21T18:19:07.677 に答える
2

これが私がすることです:

  • ユニット、ユニットのテスト、およびテスト フレームワークのみからのソースを使用するメイン ソリューションで、テスト実行可能プロジェクトを作成します。
  • Visual Studio が依存関係を追跡できるように、テストの実行が成功したときにテスト ランナーがテキスト ファイルを生成するようにします。
  • プロジェクトを追加してテスト ランナーを起動し、テスト ファイルを生成します。これは、テストごとに 2 つのプロジェクトがあることを意味します。
  • テスト ランナーを、ユニットを組み込んだライブラリの依存関係にします。

個人的には、テスト フレームワーク (Google Test、Boost テスト、CppUnit など) はそれほど重要ではないと思います。ほとんどは機能的にほぼ同等です。

生成されたプロジェクトの数に完全に満足しているわけではありませんが、デバッグなどの目的でこれらのプロジェクトをこのように含めることが実際に非常に役立つという意味で、これは Visual Studio の GUI の問題だと考えています。

ビルド後の手順を使用してテストを実行しようとしましたが、残念ながら、これは最初の失敗が過ぎた後にビルドが中断されなかったことを意味します。

于 2009-02-15T00:10:15.000 に答える
1

マネージド C++ を使用して、組み込みの単体テスト フレームワークを使用して、Visual Studio で単体テストを作成することもできます。

于 2008-09-22T02:29:47.620 に答える
1

私のチームは現在、VS2k5 の「テスト」ソリューションを含む自動化されたナイトリー ビルド (誰でもプロジェクト ビルド ダッシュボードから実行できる) があるシステムを使用しています。テスト ソリューションは、すべての単体テスト プロジェクトを保持します。メイン プロジェクトのコードの「単位」ごとに 1 つの単体テスト プロジェクト。

自動ビルドが実行されると、メイン ソリューションがビルドされ、次にテスト ソリューションがビルドされ、最後にテスト ソリューションによって生成されたすべての実行可能ファイルが実行されます (Perl スクリプトがこれを結合します)。コンパイルの結果とテストの実行 (EXIT _ SUCCESS、EXIT _ FAILURE) は、プロジェクト ビルド ダッシュボードを更新するために使用されます。

この EXIT _ FAILURE トリックは、メイン プロジェクトのカスタム ビルド ステップにも適用できます。単体テストのカスタム ビルド ステップが EXIT _ FAILURE を返すと、ビルド自体が失敗します。

于 2008-09-21T14:53:48.307 に答える