2017-06-06 14 views
1

静的なlibプロジェクトとunit-testsを持つコンソールアプリケーションでVisual Studio C++ソリューションを検討してください。成功したコンパイルごとにテストを自動的に実行するために、アプリケーションのビルド後のステップは"$(TargetDir)$(TargetFileName)"です。コンパイルが成功するたびにユニットテストが実行される

コンパイルに成功したがテストが失敗した場合は、時々デバッグしたいので、VSから実行する必要があります。問題は、テストが失敗してもビルドが失敗したとみなされ、VSが実行を拒否した場合です。

Aあなたが失敗したビルドを実行しようとすると、理想的なソリューションは、オプション enter image description here

を可能にすることにあるではないので、あなたが

enter image description here

(オプションはデフォルトでonしかし、遅かれ早かれ、誰であるの取得"このダイアログを再度表示しない"をクリック)

これは紛らわしいので、理想的ではありません。ビルドを再開します(コンパイルはskippです)。テストは成功したものの、テストは再び実行され、オプションはグローバルな意味であり、必要としないプロジェクトであってもすべてのプロジェクトに適用されます。それは確かに非常に大きな問題ではない、人々がこれのためにいくつかの賢いハックを持っているかどうかだけでは不思議。

たとえば、C#プロジェクトのビルドイベントには、「ビルド時にプロジェクトの出力が更新されたとき」というオプションがあります。各コンパイル後にユニットテストに最適です。

プロジェクトはクロスプラットフォームなので、VSテストフレームワークは適用されません。

+0

なぜVSですか?テストフレームワークは適用されませんか?他のプラットフォームでMSBuildを使用していないと仮定して、ここでは必然的にプラットフォーム固有のソリューションを求めています。 – Sneftel

+0

@Sneftel:単体テストはクロスプラットフォームなので、私たちはGoogleテストを使用します。大部分の開発はWindowsのVSで行われます(これはかなり一般的な設定だと思います)。私のVSテストフレームワークに関する知識は限られていますが、ここでどのように役立つのでしょうか? –

+0

単体テストを主プロジェクトに依存する別々のプロジェクトにするのはどうですか?ビルドに失敗した場合、メインプロジェクトはビルド済みとしてマークされます。 – VTT

答えて

0

私は "make unit project"コマンドからなる "makefile project"(ファイル - >追加 - >新規プロジェクト - > Visual C++ - > General - > Makefileプロジェクト)を追加することを提案します。自己テストを含まないテストアプリケーション自体を作成します。

次に、ソリューション全体がテストの失敗で失敗しますが、テスト自体は成功します。

あなたの状況は普通です。通常、テストアプリを除いて、ソリューションには「有益な仕事アプリ」が含まれていて、単体テストは「有益な仕事アプリ」(テストアプリにも依存します)の事前ビルドに行きます。

関連する問題