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


125

プロジェクトの関数/メソッドを記述しようとしていますが、実行するすべてのテストケースをユーザーに尋ねます。それは以下のように見えます...、

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_1した場合Test_Cases_N。次に、これら2つのテストケースを実行し、その他すべてをから除外する必要がありTest_Cases_2 to ....ます。結果ウィンドウでも、Test_Cases_1との結果を確認したいと思いTest_Cases_Nます。

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

回答:


181

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

一部の単体テストのみを実行するには、複数のテストと照合するため--gtest_filter=Test_Cases1**?ワイルドカードを受け入れる値を持つコマンドラインオプションを使用できます。それはあなたの問題を解決すると思います。

UPD:

問題は、特定のテストケースを実行する方法でした。あなたのアプローチの詳細を提供しなかったので、gtestをGUIと統合することも別のことです。ただし、次のアプローチが適切な出発点になると思います。

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

これをお勧めします。プロンプトベースのシステムが必要な場合は、ユーザー入力を取得し、それに応じてテストプログラムを実行するラッパースクリプトを作成することをお勧めします。
ボイシー

@nogard:はい、あなたは正しいですが、私の/私たちの目標は持っているであろう、GUIを持つことであるTreeのをTestCasesTestNo。それで、あなた--gtest_filter=..は助けになると思いますか?
Rasmi Ranjan Nayak 2012

@nogard:多くの助けに感謝します...指示どおりに先に進みます..完了したらお知らせします。
Rasmi Ranjan Nayak 2012

1
@nogard:私はあなたが指示したのと同じことをしています。int main(int argc, char **argv) { //::testing::GTEST_FLAG(list_tests) = true; // For Testing InitGoogleTest(&argc, argv); ::testing::GTEST_FLAG(list_tests) = true; ........ RUN_ALL_TEST();...}ただし、TestcaseとTestNoのみが出力されます。そして、それはテストを実行しません。では、どうすれば今テストを実行できますか?
Rasmi Ranjan Nayak 2012

@RasmiRanjanNayak:メインをまったく変更しないことを提案しました。テストを2回実行することを提案します。1回目は--gtest_list_testsを使用して実行し、次にオプション--gtest_filterを使用して選択したテストを2回実行します
nogard

91

@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();
}

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


6
「コード上」の部分でとても便利です!! これは私が探していたものです!
Iero

28

最後に、::test::GTEST_FLAG(list_tests) = true;//コンソールからではなく、プログラムからいくつかの回答を得 ました。

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

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

Updated:-

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.