自動テストに関する限り、C++ プログラムの自動テストはどのように行うのですか? 単体テストと統合テストを実行するために利用できる自動テスト フレームワークはありますか?
5 に答える
Autotest ala Ruby Autotest について話しているのですか? もしそうなら、多分Watchrがあなたのために働くでしょう。はい、開発マシンに Ruby ランタイムをインストールする必要がありますが、ファイル システムが変更されたときに、コマンド ラインで実行できるほとんどすべてのことをトリガーできるようです。たとえば、ソース ツリー内の .c/.cpp/.h/.hpp ファイルが変更されるたびに Watchr に C++ テストをビルドして実行させたい場合は、次のようにすることができます。
watch('src/(.*)\.[h|cpp|hpp|c]') {system "build/buildAndRunTests.bat"}
この特定のコマンドは明らかに、ビルド プロセスがどのようにセットアップされているか (そして明らかに Windows を使用していること) についていくつかの仮定を立てていますが、それが要点であるはずです。私たちのチームは、ビルドされた単体テスト バイナリを自動的に実行するビルド後のイベントを使用して単体テスト プロジェクトを構成するため、buildAndRunTests.bat
スクリプト内でビルド プロセスのその部分をトリガーし、結果をコマンド ラインに出力させることができます。微調整が必要かもしれませんが、Watchr が良い選択のようです。試してみたら、この応答を更新します (できれば来週初め)。
更新: C# プロジェクトの 1 つでこれを試したところ、そこで動作しました。したがって、理論的には C++ プロジェクトでも動作するはずです。
autotest.watchr :
watch('./.*/.*\.cs$') {system "cd build && buildAndRunTests.bat && cd ..\\"}
正規表現の末尾にある$に注意してください。これは重要です。ビルド時にソース ツリーに多数のアーティファクトが生成され、それらのいずれかが文字列.csと一致すると、別の実行がトリガーされ、実質的に無限ループが発生するためです。ビルド時にソース ファイルを生成/変更すると、おそらく同じことが起こるので、補正する方法を見つける必要があるかもしれません。
buildAndRunTests.bat :
pushd ..\
rem Build test project
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com" Tests.Unit\Tests.Unit.csproj /rebuild Release
popd
rem Navigate to the directory containing the built files
pushd ..\Tests.Unit\bin\Release
rem Run the tests through nunit-console
..\..\..\Dependencies\NUnit-2.5.5-bin\net-2.0\nunit-console.exe Tests.Unit.dll /run=Tests.Unit
popd
次に、別のコンソール ウィンドウでプロジェクト ディレクトリに移動し、次のコマンドを実行します ( autotest.watchrがプロジェクト ツリーの一番上にあると仮定します。以下を参照してください)。
watchr autotest.watchr
これで、ソース ツリー内の .cs ファイルが変更されると、buildAndRunTests.batスクリプトが自動的に実行されます。これは私のローカル マシンの例にすぎないため、あなたのマシンではそのままでは機能しない可能性がありますが、必要に応じて微調整できるはずです。
これは、参照用のディレクトリ構造です。
/Project
/build
buildAndRunTests.bat
/Tests.Unit
/Dependencies
/NUnit-2.5.5-bin
/net-2.0
nunit-console.exe
autotest.watchr
これが役立つことを願っています。
前回 Qt で作業を行ったとき、Qt の QTestLib を単体テストに使用しました。それは私のローファイのニーズにうまく機能しました。http://doc.qt.nokia.com/4.6/qtestlib-manual.html
xUnit ファミリーは単体テストに使用できます。プレーン C++ コード (CPPUNIT) と .Net コード (NUnit) 用に存在します。
Boostには、他の多くの中で見ることができるテストライブラリがあります。
これを実現するために NUnit を使用できますが、もっと良い方法があるかもしれません。NUnit を使用すると、C++ コードを呼び出しているマネージド C++/CLI でテスト クラスを記述します。これは、おそらくアンマネージドとして実行されます。したがって、このオプションでは、NUnit を使用するためだけに、一部の C++ コードがマネージドとして実行されるようになりました。このアプローチの「純度」について議論するかもしれません。これに関するもう 1 つの問題は、NUnit にデバッガーをアタッチし (もちろんマネージとネイティブの両方を有効にして)、マネージ C++/CLI ビットを賢明な方法でステップ実行しようとすることです。それにもかかわらず、私たちのオフィスでは、しばらくの間、C++ の単体テストと統合テストに NUnit を使用しています。
CPPUnitに関する@Patrickの回答を見たところ、それを見る必要があります。