GTest使用チュートリアル(3)--実行パラメータ

14801 ワード

1はじめに
gtestを使用して作成されたテストケースは、通常、実行可能なファイルであるため、実行が便利です.同時にgtestは、ケースの実行を効果的に制御できる一連の実行パラメータ(環境変数、コマンドラインパラメータ、コードで指定)を提供しています.
2基本的な紹介
前述したように、gtestは、実行パラメータについて3つの設定方法を提供します.
  • システム環境変数
  • コマンドラインパラメータ
  • コードで指定するFLAG
  • 3つのルートが提供されているため、優先度の問題があり、最後に設定したものが有効になるという原則があります.ただし、一般的には、コマンドラインパラメータ>コードにFLAG>システム環境変数を指定する優先順位が望ましい
    なぜ私たちが作成したテストケースは、これらのコマンドラインパラメータを処理できるのでしょうか.main関数では,コマンドラインパラメータをgtestに渡し,gtestによってコマンドラインパラメータの問題を解決するためである.
    int _tmain(int argc, _TCHAR* argv[])
    {
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
    

    これにより,gtestコマンドラインパラメータを受信して応答する能力が得られる.コードにFLAGを指定する必要がある場合はtesting::GTEST_を使用します.FLAGというマクロを設定します.たとえば、コマンドラインパラメータに対して-gtest_output、testing::GTEST_を使用できますFLAG(output) = “xml:”;を選択して設定できます.気づいたら、-gtest接頭辞を付ける必要はありません.また、InitGoogleTestの前に置くことをお勧めします.これにより、同じパラメータに対して、コマンドラインパラメータの優先度がコードで指定されたものよりも高くなります.
    int _tmain(int argc, _TCHAR* argv[])
    {
        testing::GTEST_FLAG(output) = "xml:";
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
    

    最後に、次の設定方法-システム環境変数について説明します.gtestのシステム環境変数の設定が必要な場合は、次の点に注意してください.
  • システム環境変数はすべて大文字で、例えば–gtest_output,応答するシステム環境変数:GTEST_OUTPUT
  • コマンドラインパラメータの例外があります.それは-gtest_です.list_testsは、システム環境変数を受け入れません.(テストケース名の羅列にのみ使用)
  • 3パラメータリスト
    上記の内容を理解したら、ここでは直接すべてのコマンドラインパラメータをまとめ、羅列します.詳細なコマンドラインの説明を取得するには、ケースを直接実行し、コマンドラインパラメータを入力します:/?または--helpまたは-help
    3.1. テストケースセット
    コマンドラインパラメータ
    説明
    - -gtest_list_tests
    このパラメータを使用すると、中のテストケースは実行されず、ケースのリストが出力されます.
    - -gtest_filter
    実行されたテストケースをフィルタし、ワイルドカードをサポートします:?単一の文字*任意の文字-除外、例えば-aはaを除く:取る、または、例えば、a:bはaまたはbを表す.例えば、次の例:./foo_testはフィルタ条件を指定せず、すべてのケースを実行します./foo_test --gtest_filter=*はワイルドカード*を使用して、すべてのケースを実行することを示します./foo_test --gtest_filter=FooTest.* すべての「テストケース名testcase_name」をFooTestのケースとして実行します./foo_test --gtest_filter=Null:Constructorは、すべての「テストケース名(testcase_name)」または「テストネーム(test_name)」がNullまたはConstructorを含むケースを実行します.foo_test --gtest_filter=-DeathTest. 死亡していないすべてのテストケースを実行します../foo_test --gtest_filter=FooTest.*-FooTest.Barが実行するすべての「テストケース名(testcase_name)」はFooTestのケースであるが、FooTestを除く.Barというケース
    - -gtest_also_run_disabled_tests
    ケースを実行すると、無効に設定されたテストケースも実行されます.無効なテストケースの設定方法は、テストケース名またはテストネームにDISABLED接頭辞を追加する方法です.たとえば、//Tests that Foo does Abc.TEST(FooTest, DISABLED_DoesAbc) { }class DISABLED_BarTest : public testing::Test { };//Tests that Bar does Xyz.TEST_F(DISABLED_BarTest, DoesXyz) { }
    –gtest_repeat=[COUNT]
    ケースの繰り返し実行回数を設定し、素晴らしい機能です!例:–gtest_repeat=1000は、途中でエラーが発生しても1000回繰り返し実行されます.–gtest_repeat=-1無限回数実行...–gtest_repeat=1000 --gtest_break_on_failureは1000回繰り返し実行され、最初のエラーが発生したときに直ちに停止します.この機能はデバッグに役立ちます.–gtest_repeat=1000 --gtest_filter=FooBar 1000回のテストケース名がFooBarのケースを繰り返し実行します.
    3.2. テストケース出力
    コマンドラインパラメータ
    説明
    –gtest_color=(yes
    no
    –gtest_print_time
    コマンドラインを出力するときに、各テストケースの実行時間を印刷するかどうか.デフォルトでは印刷されません.
    –gtest_output=xml[:DIRECTORY_PATH|:FILE_PATH]
    テスト結果をxmlに出力します.1.–gtest_output=xml:出力パスを指定しない場合、デフォルトはケースの現在のパスです.2.–gtest_output=xml:d:指定出力ディレクトリ3.–gtest_output=xml:d:\foo.xml指定出力d:foo.xmlが特定のファイルパスを指定していない場合、gtestが出力するたびにレポートは上書きされず、デジタル接尾辞で作成されます.xmlの出力内容は後述しましょう.
    3.3. ケースの例外処理
    コマンドラインパラメータ
    説明
    –gtest_break_on_failure
    デバッグモードでは、ケースが失敗した場合に停止し、デバッグが容易になります.
    –gtest_throw_on_failure
    ケースが失敗した場合はC++異常で投げ出す
    –gtest_catch_exceptions
    異常をキャプチャするかどうか.gtestのデフォルトは例外をキャプチャしません.そのため、テストケースが例外を投げた場合、ダイアログボックスがポップアップされる可能性があります.これは非常に友好的ではありません.また、テストケースの実行を阻害します.このボックスを弾かないようにするには、このパラメータを設定することで実現できます.-gtest_catch_Exceptionsはゼロ以外の数に設定されます.注意:このパラメータはWindowsでのみ有効です.
    四、XMLレポート出力フォーマット
    
    <testsuites tests="3" failures="1" errors="0" time="35" name="AllTests">
      
        <testcase name="Addition" status="run" time="7" classname="">
          <failure message="Value of: add(1, 1)  Actual: 3 Expected: 2" type=""/>
          <failure message="Value of: add(1, -1)  Actual: 1 Expected: 0" type=""/>
        testcase>
        <testcase name="Subtraction" status="run" time="5" classname="">
        testcase>
      testsuite>
      <testsuite name="LogicTest" tests="1" failures="0" errors="0" time="5">
        <testcase name="NonContradiction" status="run" time="5" classname="">
        testcase>
      testsuite>
    testsuites>
    

    レポートから分かるように、TESTなどのマクロで定義したテストケース名(testcase_name)はxmlテストレポートではtestsuite nameであり、マクロでのテスト名(test_name)はxmlテストレポートではtestcase nameであり、概念的には少し混同されているようですが、どう思うか次第です.
    チェックポイントが通過すると、チェックポイントの情報は出力されません.チェックポイントが失敗すると、failureノードに詳細な失敗情報が出力されます.
    使用中に問題が見つかりました.同時に設定した場合-gtest_filterパラメータの場合、出力されたxmlレポートにはすべてのテストケースの情報が含まれますが、実行されないテストケースのstatus値は「notrun」です.私が以前考えていた出力のxmlレポートには、私が実行する必要があるテストケースの情報しか含まれていないはずです.実行する必要があるテストケースのみを出力するxmlレポートを提供できるかどうか分かりません.1000のケースのうち1つを実行する必要がある場合、レポートで実行しているケースを見つけるのは難しいので、検索できますが、面倒です.
    4まとめ
    この記事では、gtestケースの実行時に提供されるパラメータの使用方法について説明します.これらのパラメータは非常に役立ちます.gtestテストケースを実際に作成する際に必ず使用する必要がある場合.少なくとも私が今よく使っているのは、
  • –gtest_filter
  • –gtest_output=xml[:DIRECTORY_PATH|:FILE_PATH]
  • –gtest_catch_exceptions

  • 最後に、私が使用している間に遭遇したいくつかの問題をまとめます.
  • 同時使用–gtest_filterと–gtest_output=xml:の場合、xmlテストレポートにフィルタリングされたテストケースの情報のみを含めることができますか.
  • 時々、コードにtesting::GTEST_を設定します.FLAG(catch_exceptions)=1とコマンドラインで使用する–gtest_catch_Exceptionsの結果は少し異なり、コードにFLAG方式を設定しても異常がキャプチャされない場合がありますが、コマンドラインパラメータでは問題ありません.これは私がかつて出会った問題です.最後に私の処理方法は、コードにFLAGを設定し、コマンドラインパラメータに入力することです.gtest_catch_exceptions.gtestがcatchにあるとは知らなかったExceptionsの面では安定していないのか、それとも私自身のテストケースの問題なのか.