エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

その3:実行時オプションと環境変数(1)

主立った実行時オプションについて説明します。
実行時オプションには(--gtest_list_testsをのぞいて)対応する環境変数があります。環境変数に値を設定しておくと、実行時オプションを指定したときと同じ効果が得られます。

オプション 環境変数 機能
--gtest_list_tests テストの一覧を表示する
--gtest_filter GTEST_FILTER 実行するテストを指定する(フィルタリングする)
--gtest_repeat GTEST_REPEAT テストを繰り返す回数を指定する
--gtest_break_on_failure GTEST_BREAK_ON_FAILURE テストが失敗した時点でテスト全体を中断させる
--gtest_color GTEST_COLOR 結果のカラー表示を指定する
--gtest_print_time GTEST_PRINT_TIME テストの実行時間を表示する
--gtest_output GTEST_OUTPUT 結果の出力形式を指定する


以下、次のコードを例に説明します。

#include <gtest/gtest.h>

int add(int lhs, int rhs)
{
    return lhs + rhs;
}

int mul(int lhs, int rhs)
{
    return lhs * rhs;
}

TEST(AddTest, Test1)
{
    ASSERT_EQ(2, add(1, 1));
}

TEST(AddTest, Test2)
{
    ASSERT_EQ(2, add(-1, -1));
}

TEST(MulTest, Test1)
{
    ASSERT_EQ(1, mul(1, 1));
}

TEST(MulTest, Test2)
{
    ASSERT_EQ(1, mul(-1, -1));
}

int main(int argc, char* argv[])
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}


実行結果。

[==========] Running 4 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 2 tests from AddTest
[ RUN      ] AddTest.Test1
[       OK ] AddTest.Test1
[ RUN      ] AddTest.Test2
ex8.cpp:20: Failure
Value of: add(-1, -1)
  Actual: -2
Expected: 2
[  FAILED  ] AddTest.Test2
[----------] 2 tests from MulTest
[ RUN      ] MulTest.Test1
[       OK ] MulTest.Test1
[ RUN      ] MulTest.Test2
[       OK ] MulTest.Test2
[----------] Global test environment tear-down
[==========] 4 tests from 2 test cases ran.
[  PASSED  ] 3 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] AddTest.Test2

 1 FAILED TEST

--gtest_list_tests

テストの一覧を表示します。テストの実行はおこなわれません。

AddTest.
  Test1
  Test2
MulTest.
  Test1
  Test2

--gtest_filter

実行するテストを指定します。
テストケース名やテスト名を指定することで、一部のテストのみを実行することができます。
また名前の指定では、ワイルドカード(*)を使うこともできます。

オプションの指定例 実行されるテスト
--gtest_filter=AddTest.* テストケース名がAddTestのテストのみ実行する
--gtest_filter=*.Test1 テスト名がTest1のテストのみ実行する
--gtest_filter=*Test.Test1 テストケース名が*Test、テスト名がTest1のテストのみ実行する
--gtest_filter=AddTest.Test* テストケース名がAddTest、テスト名がTest*のテストのみ実行する
--gtest_filter=-*.Test1 テスト名がTest1のテスト以外のテストのみ実行する
--gtest_filter=AddTest.*-AddTest.Test1 テストケース名がAddTestでAddTest.Test1を除いたテストのみ実行する

--gtest_repeat

テストを実行する回数を指定します。
負数を指定した場合、テストは繰り返し実行され停止しません。

オプションの指定例 実行されるテスト
--gtest_repeat=2 テストは2回実行される
--gtest_repeat=-1 テストは停止されるまで繰り返し実行される

--gtest_break_on_failure

テストが失敗したしたとき、テストスイート全体を中断させます。
ASSERT_*マクロが失敗した場合でも、テストが中断するだけでテストケースやテストスイート全体は停止せず、次のテストが実行されます。
このオプションを指定すると、テストが失敗した時点でテストスイート全体を中断し、テストを停止させます。

このオプションは--gtest_repeatに負数を指定した場合にも有効で、繰り返しの中でテストが失敗したときに繰り返しも中断されます。

--gtest_color

カラー表示を指定します。
--gtest_color=yes、あるいは--gtest_color=1と指定すると、テスト結果が色付けされます。

--gtest_color=yesを指定したときの実行結果。

[==========] Running 4 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 2 tests from AddTest
[ RUN      ] AddTest.Test1
[       OK ] AddTest.Test1
[ RUN      ] AddTest.Test2
ex8.cpp:20: Failure
Value of: add(-1, -1)
  Actual: -2
Expected: 2
[  FAILED  ] AddTest.Test2
[----------] 2 tests from MulTest
[ RUN      ] MulTest.Test1
[       OK ] MulTest.Test1
[ RUN      ] MulTest.Test2
[       OK ] MulTest.Test2
[----------] Global test environment tear-down
[==========] 4 tests from 2 test cases ran.
[  PASSED  ] 3 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] AddTest.Test2

 1 FAILED TEST

--gtest_print_time

テストの実行時間を表示します。


--gtest_print_timeを指定したときの実行結果。

[==========] Running 4 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 2 tests from AddTest
[ RUN      ] AddTest.Test1
[       OK ] AddTest.Test1 (0 ms)
[ RUN      ] AddTest.Test2
ex8.cpp:20: Failure
Value of: add(-1, -1)
  Actual: -2
Expected: 2
[  FAILED  ] AddTest.Test2 (30 ms)
[----------] 2 tests from AddTest (31 ms total)

[----------] 2 tests from MulTest
[ RUN      ] MulTest.Test1
[       OK ] MulTest.Test1 (0 ms)
[ RUN      ] MulTest.Test2
[       OK ] MulTest.Test2 (0 ms)
[----------] 2 tests from MulTest (32 ms total)

[----------] Global test environment tear-down
[==========] 4 tests from 2 test cases ran. (67 ms total)
[  PASSED  ] 3 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] AddTest.Test2

 1 FAILED TEST

--gtest_output

テスト結果を指定した形式でファイルに出力します(現時点ではXML形式のみのサポートのようです)。

--gtest_output="xml"と指定して実行した場合、test_detail.xmlというファイル名のXMLファイルが生成されます。
--gtest_output="xml:ファイル名"と指定して実行した場合、指定したファイル名のXMLファイルが生成されます。


--gtest_output="xml:result.xml"を指定したときのresult.xmlファイルの内容。

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="4" failures="1" disabled="0" errors="0" time="44" name="AllTests">
  <testsuite name="AddTest" tests="2" failures="1" disabled="0" errors="0" time="1">
    <testcase name="Test1" status="run" time="0" classname="AddTest" />
    <testcase name="Test2" status="run" time="1" classname="AddTest">
      <failure message="ex8.cpp:20&#x0A;Value of: add(-1, -1)&#x0A;  Actual: -2&#x0A;Expected: 2" type=""/>
    </testcase>
  </testsuite>
  <testsuite name="MulTest" tests="2" failures="0" disabled="0" errors="0" time="41">
    <testcase name="Test1" status="run" time="0" classname="MulTest" />
    <testcase name="Test2" status="run" time="0" classname="MulTest" />
  </testsuite>
</testsuite>