2:フィクスチャによる前準備と後始末
「1:シンプルなテスト」で示したテストはどれもStackCalc<int> sc(5);から始まっています。このような前準備や後始末その他テストに必要な関数をフィクスチャ(fixture)で1つにまとめることができます。フィクスチャはtesting::Testから導出したクラスで定義し、必要な前準備/後始末はフィクスチャのコンストラクタ/デストラクタもしくは仮想関数SetUp()/TearDowm()で行います。
class StackCalcTest : public testing::Test {
public:
StackCalcTest() : sc(5) {}
virtual ~StackCalcTest() {}
protected:
virtual void SetUp() { sc.throw_exception(); }
virtual void TearDown() {}
StackCalc<int> sc;
private:
};
テスト内で使いたいメンバ変数/関数はフィクスチャのpublicまたはprotected部に置いてください。各テストはTEST_F(フィクスチャ名,テスト名) {...}とします。
TEST_F(StackCalcTest,initialize) {
ASSERT_EQ(0, sc.size());
ASSERT_TRUE(sc.empty());
ASSERT_FALSE(sc.full());
}
TEST_F(StackCalcTest,push) {
sc.push(3);
ASSERT_FALSE(sc.empty());
EXPECT_EQ(1, sc.size());
EXPECT_EQ(3, sc.top());
sc.push(4);
ASSERT_FALSE(sc.empty());
EXPECT_EQ(2, sc.size());
EXPECT_EQ(4, sc.top());
}
...
あらフシギ、どうしてテストの中からStackTest::scが参照できるんでしょ。気になって調べてみました。
TEST_F(StackCalcTest,initialize) { うにゃうにゃ } は:
class StackCalcTest_initialize_Test : public StackCalcTest {
virtual void TestBody();
...
};
void StackCalcTest_initialize_Test::TestBody() {
うにゃうにゃ
}
に展開されていました。なるほど、各テストがフィクスチャの派生クラスのメンバ関数になっちゃうのか。テスト中で使用するメンバ変数/関数をprotected/publicに置くのも納得です。
googletestの基本的な使い方はここまで。すっごく簡単です。
