CMakeを使用して、CTestから詳細な出力を取得するにはどうすればよいですか?


109

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

失敗したテストを確認できないため、これはあまり役に立ちません。コマンドラインからctestを手動で実行--verboseすると、実際に何が失敗したかを示す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を常に実行するために、CMakeLists.txtで何を変更する必要があり--verboseますか?CMake / CTestでBoost単体テストを使用するより良い方法はありますか?


回答:


92

CTEST_OUTPUT_ON_FAILUREテストが失敗したときにテストプログラムからの出力を表示する環境変数を設定できます。Makefileとコマンドラインを使用するときにこれを行う1つの方法は、次のとおりです。

env CTEST_OUTPUT_ON_FAILURE=1 make check

このスタックオーバーフローの質問と回答は、Visual Studioで環境変数を設定する方法を示しています。


3
動作しません(ctestバージョン2.8.12.1)。私が試したSET(CTEST_OUTPUT_ON_FAILURE TRUE)SET(CTEST_OUTPUT_ON_FAILURE ON)、それは効果がありません。ウェブの他のレポートは、これが壊れていることを裏付けています。
Joachim W

4
@JoachimWuttke set(CTEST_OUTPUT_ON_FAILURE TRUE)環境変数を設定しません。コマンドラインでこれを試してください:CTEST_OUTPUT_ON_FAILURE=TRUE make test
ザハウス

3
make CTEST_OUTPUT_ON_FAILURE=1 testIMOはより短く、より優れています。
Timmmm 2017年

Windowsバッチファイルで、呼び出し中にCTEST_OUTPUT_ON_FAILURE = 1を使用する方法-msbuild /toolsversion:15.0 / p:Configuration = Release / p:Platform = x64 TESTS.vcxproj
Toral


29
  1. Testing/Temporaryサブフォルダを確認できます。make testを実行すると自動的に作成されます。このフォルダーには2つのファイルが含まれています:LastTest.logおよびLastTestsFailed.logLastTest.logテストの実行に必要な出力が含まれています。LastTestFailed.log失敗したテストの名前が含まれます。したがって、実行後に手動で確認できますmake test

  2. 2番目の方法は、ctestにテストの実行後にログファイルの内容を表示させることです。

    1. 内の場所、ビルドディレクトリ(あなたが実行しているからmake test)ファイルCTestCustom.ctest(あなたがそれを行うことができますのconfigureファイルの次の内容で、たとえば、コマンド)

      CTEST_CUSTOM_POST_TEST( "cat Testing / Temporary / LastTest.log")

catの代わりに、同様のことを行うWindowsのcmdコマンドを使用できます。

  1. make testもう一度実行して利益を得てください!

ここで見つけることができるctestのカスタマイズに関する追加情報。「cmakeのカスタマイズ」セクションに進んでください。幸運を!


1
わかりました、ありがとう。ctestのプロジェクト/ makefileに挿入されるフラグを変更する方法があることを望んでいましたが、何も見つからず、あなたの答えはそれを確認しているようです。ファイル名情報は役に立ちます!
Skrymsli

1
どこかの周りcTESTを2.8.10彼らはCTEST_CUSTOM_POST_TEST参照で引数を使って外部コマンドを使用して壊れているgithub.com/openscad/openscad/issues/260
明るいドン

@don:多分彼らはctestで十分なテストを実行していない;-)
Joachim W 14

CTEST_CUSTOM_POST_TESTに関するCMakeの問題は、2.8.12で修正されています。
Ela782 14

23

「チェック」ターゲットを自分で追加する必要がありました。「テストを作成」は、何らかの理由で何もしません。だから私は何をしたか(stackoverflowのどこかで示唆されたように)-私はこのターゲットを手動で追加しました。詳細な出力を取得するには、次のように書きます。

add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)

21

非常に単純な解決策があります(何らかの理由でGoogle検索で見つけるのが難しい)。

ctest --output-on-failure

Visual Studioのフォルダーを開く機能でCMakeを使用する場合は、

"ctestCommandArgs": "--output-on-failure"

ビルド構成に設定します。


1
私はあなたの解決策がとても好きです。失敗した場合を除き、詳細にはなりません。
AnthonyD973 2018年

19

make check CTEST_OUTPUT_ON_FAILURE=TRUE


6
すべての反対票は意外なものです。これは、受け入れられた回答とほぼ同じですが、短くて優れています。私がテストしたプロジェクトでも動作します。
zbyszek

2
CTEST_OUTPUT_ON_FAILURE = 1テストを実行
Alex Punnen


10

私のアプローチは、回答の組み合わせであるONYからzbyszekから、およびTARCから。を使用して${CMAKE_COMMAND}変数(呼び出されたcmake実行可能ファイルへの絶対パスに設定されています)を-E env CTEST_OUTPUT_ON_FAILURE=1使用して、実際のctestコマンドを呼び出し${CMAKE_CTEST_COMMAND} -C $<CONFIG>ます。何が起こっているのかを明確にするためにcmake -E echo、現在の作業ディレクトリと呼び出されるctestコマンドを表示する3つのコマンドから始めます。これが私が呼ぶ方法です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 envを参照してくださいcmake -E。またALL_BUILDcheckターゲットを呼び出す前にすべてのプロジェクトがビルドされるように依存関係を追加します。(Linuxビルドでは、1は交換する必要があるかもしれないALL_BUILDALL、私はまだLinux上でこれをテストしていません。)


6

Visual Studioを使用している人のために、テーマの別のバリエーション(ハック)を次に示します。

cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS

0

XMLファイルで結果を表示するには、次のコマンドでテストを実行する必要があります

~$ ctest -T Test

そして、Testing / 1234123432 / test.xmlに結果があり、他のファイルもTesting Folderに生成されています


0

ctest -VV または ctest --extra-verbose

ドキュメントから:

テストからのより詳細な出力を有効にします。

テスト出力は通常抑制され、要約情報のみが表示されます。このオプションは、さらに多くのテスト出力を表示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.