使用googletest测试受保护的成员

时间:2014-10-13 09:51:18

标签: c++ inheritance testing googletest protected

我在googletesting时对继承感到困惑。我的class A具有protected个属性。如果我想访问那些我必须扩展该类,但同时我还需要扩展public ::testing::Test仅用于gtest

这个问题最优雅的解决方案是什么? 我也试图避免#define protected public

2 个答案:

答案 0 :(得分:10)

为避免在测试类中留下测试痕迹,请使用fixture的多重继承:

class ToBeTested
{
protected:
    bool SensitiveInternal(int p1, int p2); // Still needs testing
}

// Google-test:
class ToBeTestedFixture : public ToBeTested, public testing::Test
{
   // Empty - bridge to protected members for unit-testing
}

TEST_F(ToBeTestedFixture, TestSensitive)
{
    ASSERT_TRUE(SensitiveInternal(1, 1));
    ASSERT_FALSE(SensitiveInternal(-1, -1));
}

答案 1 :(得分:2)

有一个FRIEND_TEST声明,用于测试类的标题中。基本上它将测试定义为类的朋友。在我的用例中,我们在RELEASE模式下编译时禁用所有测试包含,因此它不会对真正的可执行文件造成任何伤害。

查看this