FAQ / QTE (Quality Town for Embedded Grade)
【QTE21】テスト作成に関する問題
QTE21_06 : Google Test
【質問】
テストドライバからテスト対象クラスのprivateメンバー変数にアクセスする方法を教えてください。
【回答】
テスト対象クラスのprivateメンバ変数をテストする方法として、
@ テストフィクスチャクラスをfriendクラスとして宣言する方法
A テストドライバ関数をfriend関数として宣言する方法
の2通りあります。
@ テストフィクスチャクラスをfriendクラスとして宣言する方法
テストフィクスチャクラスのメンバー関数がテスト対象クラスのprivate変数にアクセスできるようにテストフィクスチャクラスを
テスト対象クラスのfriendクラスとして宣言します。次にプライベート変数へのGetter関数をテストフィクスチャクラスに定義します。
テストドライバ関数はGetter関数を使ってprivate変数にアクセスします。

例を使って説明します。
テスト対象であるSampleクラスのnum_メンバーの値をテストする関数を作成します。
SampleTestクラスがSampleクラスのnum_メンバーにアクセスできるように、SampleTestクラスをSampleクラスのfriendクラスとして宣言します。
// テスト対象ヘッダ(sample.h)
class Sample {
friend class SampleTest;
public:
// 省略
private:
int num_;
};
テストフィクスチャクラスにSampleクラスのnum_メンバにアクセスするget_numメンバー関数を定義します。
テストドライバ関数はテストフィクスチャクラスのget_num関数を呼び出して、num_メンバーの値を取得します。
// テストドライバソース(sampleTest.cpp)
class SampleTest : public ::testing::Test {
protected:
int get_num(const Sample& sample) { return sample.num_; }
};
TEST_F(SampleTest, test1)
{
Sample obj;
// 省略
EXPECT_EQ(2, get_num(obj));
}
A テスト関数をfriend関数として宣言する方法
テストドライバのテスト関数をテスト対象クラスのfriend関数として宣言します。friend関数として定義するにはFRIEND_TESTマクロを使用します。
(例)TEST(SampleTest, test1)関数を、以下のようにFRIEND_TESTマクロを使用してfriend関数として宣言します。
#include "gtest/gtest.h"
class Sample {
FRIEND_TEST(SampleTest, test1);
// 省略
};
Google Testのドキュメントの入門ガイド(
http://opencv.jp/googletestdocs/primer.html#primer-test-fixtures)にテストフィクスチャについて記載
されています。
テストフィクスチャの詳細はそちらをご覧ください。
また、2種類の方法についてはGoogle Testドキュメントの上級ガイドの「Privateコードのテスト」の「Privateクラスメンバ」
(
http://opencv.jp/googletestdocs/advancedguide.html#adv-private-class-members)に記載されています。
そちらも合わせて参照ください。
関連サポート情報検索