2012年5月8日火曜日

DISABLED テストの小技(Google Test)

まずは、こちらのテストコードをご覧下さい。
#define DISABLED_MacroTest  EnabledTest
#define MacroTest           DISABLED_Test

TEST(DISABLED_MacroTest, Enable)
{
    ASSERT_EQ(0, 0);
}

TEST(MacroTest, NotRun)
{
    ASSERT_EQ(2, 3);
}
#define したマクロ名をテストケースの名前として指定しています。
さて、こちらのテストを実行するとどうなると思いますか?


EnabledTest が実行され、MacroTest が実行されていないのがわかると思います。
実は、TEST マクロに指定したトークンは展開されます。
試しに、--gtest_also_run_disabled_tests で実行するとこうなります。


MacroTest が DISABLED_Test として評価されているのがわかりますね。

同様に TEST_F でも展開されます。
class EnabledTestFixed : public testing::Test {};

typedef EnabledTestFixed    DISABLED_TestFixed;

#define MacroTestF  DISABLED_TestFixed
#define DISABLED_MacroTestF EnabledTestFixed

TEST_F(MacroTestF, NotRun)
{
    ASSERT_EQ(2, 3);
}

TEST_F(DISABLED_MacroTestF, Run)
{
    ASSERT_EQ(0, 0);
}



この動作を利用してこのような、使い方ができます。
#ifdef USER_ZUMIX
#  define MYTESTCASE_NAME  MyTest
#else
#  define MYTESTCASE_NAME  DISABLED_MyTest
#endif

TEST(MYTESTCASE_NAME, Test1)
{
}



それじゃ、TEST_P も…と思いますが、
残念ながら、TEST_P や TYPED_TEST ではこの手法は使えません。
(iutestならできます!)

今回は、Google Test のちょっとしたテクニックを紹介しました。
それでは。

0 件のコメント:

コメントを投稿