133

プロジェクトのビルドに 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 単体テストを使用するより良い方法はありますか?

4

11 に答える 11

110

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

env CTEST_OUTPUT_ON_FAILURE=1 make check

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

于 2011-04-22T15:54:25.147 に答える
54

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

ctest --verbose
于 2016-07-15T01:32:50.660 に答える
33
  1. Testing/Temporaryサブフォルダを確認できます。make test を実行すると、自動的に作成されます。このフォルダにはLastTest.log、 との 2 つのファイルが含まれていますLastTestsFailed.logLastTest.logテストの実行に必要な出力が含まれています。LastTestFailed.log失敗したテストの名前が含まれています。したがって、実行後に手動で確認できますmake test

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

    1. build dir (実行make test元) ファイル CTestCustom.ctest に次の内容で配置します (たとえば、configure file コマンドで実行できます)

      CTEST_CUSTOM_POST_TEST("猫のテスト/一時/LastTest.log")

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

  1. 再び実行make testして利益を得る!

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

于 2011-04-19T04:06:17.693 に答える
25

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

add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)
于 2013-04-05T16:52:45.117 に答える
21

make check CTEST_OUTPUT_ON_FAILURE=TRUE

于 2015-02-09T21:05:48.937 に答える
18

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

make test ARGS="-V"
于 2018-09-10T21:32:13.980 に答える
10

私のアプローチは、 ony 、 zbyszek 、および tarc からの回答を組み合わせものです。変数 (呼び出された cmake 実行可能ファイルへの絶対パスに設定されている) を引数とともに使用して、. 何が起こっているのかを明確にするために、現在の作業ディレクトリを表示する 3 つのコマンドと、呼び出される ctest コマンドから始めます。を呼び出す方法は次のとおりです。${CMAKE_COMMAND}-E env CTEST_OUTPUT_ON_FAILURE=1${CMAKE_CTEST_COMMAND} -C $<CONFIG>cmake -E echoadd_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に、依存関係を追加します。(Linux ビルドでは、 に置き換える必要がある場合があります。これは Linux ではまだテストしていません。)ALL_BUILDcheckALL_BUILDALL

于 2015-06-29T20:00:15.897 に答える
0

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

~$ ctest -T Test

結果は Testing/1234123432/test.xml にあり、その他のファイルも Testing フォルダーに生成されます。

于 2019-08-28T08:57:53.583 に答える