参考: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:
コメントを投稿