web-dev-qa-db-ja.com

GoogleTestで特定のテストケースを実行する方法

プロジェクトの関数/メソッドを作成しようとしていますが、どのテストケースを実行するのかをユーザーに尋ねますか?以下のように見えます...、

Test_Cases_1
         |_TestNo1
         |_TestNo2....so on
Test_Cases_2
         |_TestNo1
         |_TestNo2....so on
....
....so on
Test_Cases_N
         |_TestNo1
         |_TestNo2....so on

だから、今の課題は、プロジェクトの実行中に、すべてのテストケースを実行するかどうかを尋ねる必要がありますか? Test_Cases_1Test_Cases_Nを選択した場合。次に、これらの2つのテストケースを実行し、Test_Cases_2 to ....から他のすべてを除外する必要があります。結果ウィンドウでも、Test_Cases_1Test_Cases_Nの結果を確認したいと思います。

したがって、GoogleTestが表示される場合、test_case_to_run_count()というメソッドがあります。しかし、すべてのtest casesはTest_F()メソッドで登録されています。そのため、私は多くの分析を行いましたが、それでも解決策は見つかりませんでした。私を助けてください。

105

高度なオプション を使用して、Googleテストを実行できます。

一部の単体テストのみを実行するには、--gtest_filter=Test_Cases1*コマンドラインオプションと正規表現の値を使用できます。私はそれがあなたの問題を解決すると思います。

UPD:

問題は、特定のテストケースをrunする方法でした。あなたのGUIとgtestの統合は別のことです。あなたはあなたのアプローチの詳細を提供しなかったので、私は本当にコメントできません。ただし、次のアプローチが良いスタートになると思います。

  1. --gtest_list_testsでテストを実行して、すべてのテストケースを取得します
  2. このデータをGUIに解析します
  3. Roを実行するテストケースを選択します
  4. オプション--gtest_filterでテスト実行可能ファイルを実行します
152
nogard

@Rasmi Ranjan Nayakと@nogardの回答の要約と別のオプションの追加:

コンソールで

次のようなフラグ--gtest_filterを使用する必要があります

--gtest_filter=Test_Cases1*

(プロパティ|構成プロパティ|デバッグ|コマンド引数でこれを行うこともできます)

環境について

変数GTEST_FILTERを次のように設定する必要があります

export GTEST_FILTER = "Test_Cases1*"

コードについて

次のようなフラグfilterを設定する必要があります

::testing::GTEST_FLAG(filter) = "Test_Cases1*";

あなたの主な機能は次のようになります

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::GTEST_FLAG(filter) = "Test_Cases1*";
    return RUN_ALL_TESTS();
}

使用できる文字列の構文の詳細については、セクション テストのサブセットの実行 を参照してください。

73
Jorge Leitão

最後に、::test::GTEST_FLAG(list_tests) = true; //w.r.tコンソールではなく、あなたのプログラムから答えが返ってきました。

--gtest_filter =*;/* =*, =xyz*... etc*/を使用する場合は、//コンソールで使用する必要があります。

したがって、私の要件は、コンソールからではなく、プログラムからそれらを使用することです。

Updated:-

最後に、プログラムから同じものを更新するための答えを得ました。

 ::testing::GTEST_FLAG(filter) = "*Counter*:*IsPrime*:*ListenersTest.DoesNotLeak*";//":-:*Counter*";
      InitGoogleTest(&argc, argv);
RUN_ALL_TEST();

だから、すべての答えをありがとう。

あなたの人々は素晴らしいです。

26