我在googletesting时对继承感到困惑。我的class A
具有protected
个属性。如果我想访问那些我必须扩展该类,但同时我还需要扩展public ::testing::Test
仅用于gtest
。
这个问题最优雅的解决方案是什么?
我也试图避免#define protected public
答案 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