ホーム > ユー ザーサポート > QTE

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)に記載されています。
そちらも合わせて参照ください。

関連サポート情報検索

【サポート情報サイト内Google検索】

検索キーワード: ★インストーラ★ | ★ISO26262★

他のキーワード検索




参考情報・リンク