参考:http://code.google.com/p/googletest/wiki/AdvancedGuide#Private_Class_Members
テスト対象ソースを汚す必要のない方法2の方が良いかな。
方法1 friendを使用する
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <string>
// テスト対象のクラス
class ClassPrivateMethod1
{
// テストフィクスチャをフレンドにする
friend class ClassPrivateMethodTest1;
private:
// このprivateメンバ関数のテストをしたい
std::string foo() { return std::string("This is a private method!"); }
};
// テストフィクスチャ
class ClassPrivateMethodTest1 : public ::testing::Test
{
public:
virtual void SetUp() {}
virtual void TearDown() {}
// privateメンバ関数へのアクセサ
virtual std::string foo() { return c.foo(); }
protected:
ClassPrivateMethod1 c;
};
TEST_F(ClassPrivateMethodTest1, accessPrivateMethod)
{
// アクセサを使ってprivateメンバ関数のテストができた!
EXPECT_STREQ("This is a private method!", foo().c_str());
}
方法2 FRIEND_TESTマクロを使用する
// テスト対象のクラス
class ClassPrivateMethod2
{
// 特定のテストケースをフレンドにする
FRIEND_TEST(ClassPrivateMethodTest2, accessPrivateMethod);
private:
// このprivateメンバ関数のテストをしたい
std::string foo() { return std::string("This is a private method!"); }
};
TEST(ClassPrivateMethodTest2, accessPrivateMethod)
{
ClassPrivateMethod2 c;
EXPECT_STREQ("This is a private method!", c.foo().c_str());
}
0 Kommentarer:
コメントを投稿