3

CMake で CTest を使用していくつかのテストを実行しています。enable_testing()のデフォルト コマンドを提供するコマンドを使用しますmake test。私のサブディレクトリ内のすべてのテストは (add_testコマンドを実行することによって)説明されmake test、1 つの問題を除いてうまく機能します。

という名前の特定のテストがありますが、skip_test実行するときに実行したくないものですmake test。カスタムターゲットを追加して実行できるようにしたいと思いますmake skip_test。そのテストが実行されます。

これを行うにはadd_custom_target(skip_test ...)、CTest に-Rフラグを付けて提供し、名前に「skip_test」を含むファイルを探すように指示します。これも機能するようです。私の問題は次のとおりです。make testコマンドを無視するにはどうすればよいskip_testですか?

コメントアウトしenable_testingて独自の を追加しようとするとadd_custom_target(test ....)、「テストが見つかりません!!!」というメッセージが表示されます。今は または のいずれmake testmake skip_testです。また、カスタム CTest ファイルを作成して追加しようとしましたset(CTEST_CUSTOM_TESTS_IGNORE skip_test)。これによりmake test、「skip_test」が無視されるようになりましたが、実行make skip_testすると「テストが見つかりません!!!」と応答するようになりました。

任意の提案をいただければ幸いです!

4

2 に答える 2

2

私は実際には別のソリューションを使用しました。これが私がしたことです。除外したいテストについては、追加するときに次のコマンドを使用しました。

"add_test( ..... CONFIGURATIONS ignore_flag)" ここで、ignore_flag は任意のフレーズです。次に、私の CMakeLists.txt で、カスタム ターゲット add_custom_target( ignore_tests ...) を定義するときに、ctest .... -C ignore_flag を指定します。

さて、make test はこれらのテストをスキップします! make ignore_Tests は、無視されたテストと無視されていないテストを実行しますが、これで問題ありません。

于 2015-07-22T23:14:08.993 に答える
1

CTest を介してこれを完全に行う方法はわかりませんが、この質問に「googletest」のタグを付けたので、それをテスト フレームワークとして使用していると思います。したがって、Gtest の機能を利用して、テストを無効にしたり、無効なテスト実行したりすることができます。

問題のテストを変更して、名前に先頭DISABLED_を付けると、実行時にデフォルトで実行されなくなりますmake test

次に、無効なテストのみを実行するために、適切な Gtest フラグを使用してテスト実行可能ファイルを呼び出すカスタム ターゲットを追加できます。

add_custom_target(skip_test
    MyTestBinary --gtest_filter=*DISABLED_* --gtest_also_run_disabled_tests VERBATIM)

これは Gtest 機能の悪用のようなものです。実際には、テストを再度パスさせるために何かをリファクタリングしている間、テストを一時的に無効にするために使用することを意図しています。これは、テストをコンパイルし続けるため、テストをコメントアウトするだけではなく、スイートを実行した後にテストを無効にしたというしつこいリマインダーを与えます。

于 2015-07-07T19:08:35.540 に答える