web-dev-qa-db-ja.com

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

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ユニットテストを使用するより良い方法はありますか?

87
Skrymsli

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

env CTEST_OUTPUT_ON_FAILURE=1 make check

このStack Overflowの質問と回答 は、Visual Studioで環境変数を設定する方法を示しています。

74
richq

プロジェクトを作成して作成した後、ctestを直接呼び出すことができます。

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

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

    1. build dir(そこからmake testを実行)ファイルCTestCustom.ctestに配置(configure fileコマンド、たとえば)次の内容

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

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

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

こちら にあるctestのカスタマイズに関する追加情報。 「cmakeのカスタマイズ」セクションに進んでください。がんばろう!

27
beduin

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

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

make check CTEST_OUTPUT_ON_FAILURE=TRUE

15
zbyszek

非常に簡単な解決策があります(何らかの理由でGoogle検索で見つけるのは困難です):

ctest --output-on-failure

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

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

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

14
MikeMB

私のアプローチは、答え from onyzbyszek 、および 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_BUILDALL; Linuxでこれをまだテストしていません。

10
Phil

これにより、テスト出力がより詳細になります。

make test ARGS="-V"
9
Penghe Geng

Visual Studioを使用している人のために、ここでテーマの別のバリエーション(ハック):

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

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

~$ ctest -T Test

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

0