15

CTestを使用していくつかのテストを作成しています。通常、次の行だけでテストを設定できます。

ADD_TEST(Test_Name executable args)

ただし、問題が発生しました。テストを実行するには2つのコマンドを実行する必要があります。また、1つのctest内で2つのプログラムを実行する方法はありますか、または新しいテストを作成する必要があります。それぞれをテストしますか?

ありがとうございました。

4

2 に答える 2

20

このadd_testコマンドは実行可能ファイルを 1 つしか受け付けませんが、実際にはスクリプトである実行可能ファイルならどれでも実行できます。クロス プラットフォームの方法でこれを行うには、CMake 自体でスクリプトを記述します。CMake には、Makefile の生成時ではなく、またはの-P実行時に CMake スクリプト言語の任意のチャンクを実行するオプションがあります。makemake test

残念ながら、そのようなスクリプトに引数を渡すことはできません。ただし、変数に値を設定することもできます。これも同様に優れています。

呼び出すことができるこのスクリプトruntests.cmakeは、コマンド CMD1 と CMD2 を実行し、それぞれにゼロ以外のリターン コードがあるかどうかをチェックし、エラーが発生した場合は CMake 自体から戻ります。

macro(EXEC_CHECK CMD)
    execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT)
    if(CMD_RESULT)
        message(FATAL_ERROR "Error running ${CMD}")
    endif()
endmacro()
exec_check(${CMD1})
exec_check(${CMD2})

...そして、次のようにテスト ケースを追加します。

add_executable(test1 test1.c)
add_executable(test2 test2.c)
add_test(NAME test
    COMMAND ${CMAKE_COMMAND}
            -DCMD1=$<TARGET_FILE:test1>
            -DCMD2=$<TARGET_FILE:test2>
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake)

$<TARGET_FILE:test1>ビルド ファイルの生成時に、実行可能ファイルへのフル パスに展開されます。実行するmake testと、または同等のものが実行され、「cmake -P runtests.cmake」が実行され、CMD1 変数と CMD2 変数が適切なテスト プログラムに設定されます。スクリプトは、2 つのプログラムを順番に実行します。テスト プログラムのいずれかが失敗すると、テスト全体が失敗します。テストの出力を表示する必要がある場合は、実行できますmake test ARGS=-V

于 2010-06-18T16:20:09.077 に答える