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)に記載されています。
          そちらも合わせて参照ください。
          
          
          
          関連サポート情報検索