CMakeを使用してプロジェクトをビルドしています。 Boost単体テストフレームワークを使用している単体テストバイナリを追加しました。この1つのバイナリには、すべての単体テストが含まれています。 CTestで実行するバイナリを追加しました。
ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)
ただし、Visual Studioのビルド出力には、CTestの実行結果のみが表示されます。
Start 1: UnitTests
1/1 Test #1: UnitTests ................***Failed 0.05 sec
0% tests passed, 1 tests failed out of 1
どのテストが失敗したかわからないので、これはあまり役に立ちません。コマンドラインから--verbose
を使用してctestを手動で実行すると、実際に失敗したことを示すBoostユニットテストから出力が得られます。
1: Test command: tftest.exe
1: Test timeout computed to be: 9.99988e+006
1: Running 4 test cases...
1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed
1:
1: *** 1 failure detected in test suite "Master Test Suite"
1/1 Test #1: UnitTests ................***Failed 0.00 sec
だから、CTestを常に--verbose
で実行するには、CMakeLists.txtで何を変更する必要がありますか? CMake/CTestでBoostユニットテストを使用するより良い方法はありますか?
環境変数を設定できます CTEST_OUTPUT_ON_FAILURE
。テストが失敗するたびにテストプログラムからの出力を表示します。 Makefileとコマンドラインを使用するときにこれを行う1つの方法は次のとおりです。
env CTEST_OUTPUT_ON_FAILURE=1 make check
このStack Overflowの質問と回答 は、Visual Studioで環境変数を設定する方法を示しています。
プロジェクトを作成して作成した後、ctest
を直接呼び出すことができます。
ctest --verbose
Testing/Temporary
サブフォルダーを確認できます。 make testの実行後に自動的に作成されます。このフォルダーには、LastTest.log
とLastTestsFailed.log
の2つのファイルが含まれています。 LastTest.log
には、テストの実行に必要な出力が含まれています。 LastTestFailed.log
には、失敗したテストの名前が含まれます。したがって、make test
を実行した後、それらを手動で確認できます。
2番目の方法は、テストの実行後にctestにログファイルの内容を表示させることです。
build dir(そこからmake test
を実行)ファイルCTestCustom.ctestに配置(configure fileコマンド、たとえば)次の内容
CTEST_CUSTOM_POST_TEST( "cat Testing/Temporary/LastTest.log")
Catの代わりに、同様のことを行うWindows cmdコマンドを使用できます。
make test
を再度実行して利益を得てください!こちら にあるctestのカスタマイズに関する追加情報。 「cmakeのカスタマイズ」セクションに進んでください。がんばろう!
自分で「チェック」ターゲットを追加する必要がありました。 「テストの作成」は、何らかの理由で何もしません。だから私がやったこと(stackoverflowのどこかで提案されたように)-このターゲットを手動で追加しました。詳細な出力を取得するには、次のように書きました。
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)
make check CTEST_OUTPUT_ON_FAILURE=TRUE
非常に簡単な解決策があります(何らかの理由でGoogle検索で見つけるのは困難です):
ctest --output-on-failure
Visual Studioのフォルダーを開く機能でCMakeを使用する場合は、追加できます
"ctestCommandArgs": "--output-on-failure"
ビルド構成に設定します。
私のアプローチは、答え from ony 、 zbyszek 、および tarc の組み合わせです。 ${CMAKE_COMMAND}
変数(呼び出したcmake実行可能ファイルへの絶対パスに設定)を-E env CTEST_OUTPUT_ON_FAILURE=1
引数とともに使用して、${CMAKE_CTEST_COMMAND} -C $<CONFIG>
を使用して実際のctestコマンドを呼び出します。何が起こっているのかを明確にするために、3つのcmake -E echo
コマンドから始めて、現在の作業ディレクトリと呼び出されるctestコマンドを表示します。 add_custom_target
を呼び出す方法は次のとおりです。
add_custom_target(check
${CMAKE_COMMAND} -E echo CWD=${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E echo CMD=${CMAKE_CTEST_COMMAND} -C $<CONFIG>
COMMAND ${CMAKE_COMMAND} -E echo ----------------------------------
COMMAND ${CMAKE_COMMAND} -E env CTEST_OUTPUT_ON_FAILURE=1
${CMAKE_CTEST_COMMAND} -C $<CONFIG>
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ALL_BUILD
)
これは、MSVC IDEでニースを再生します。テストエラーはクリック可能なコンパイルエラーとして表示されます。cmake -E
ポータブルコマンドのドキュメントについては cmake -E env を参照してください。ラインツールモード。また、ALL_BUILD
への依存関係を追加して、check
ターゲットを呼び出す前にすべてのプロジェクトがビルドされるようにします(Linuxビルドでは、ALL_BUILD
をALL
; Linuxでこれをまだテストしていません。
これにより、テスト出力がより詳細になります。
make test ARGS="-V"
Visual Studioを使用している人のために、ここでテーマの別のバリエーション(ハック):
cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS
xMLファイルで結果を表示するには、次のコマンドでテストを実行する必要があります
~$ ctest -T Test
そして、結果がTesting/1234123432/test.xmlで見つかり、他のファイルもTesting Folderに生成されます