我正在使用gtest对cpp类进行单元测试。考虑一种情况,在这种情况下,我想让测试类(class)成为实际类(class)的 friend ,以便可以对其私有(private)状态进行单元测试。这对我来说很好。问题是,当使用非常有用的TEST_P
宏(该宏允许您参数化测试实例化)时,框架会稍微改变测试名称。
所以我有类似
class FooTester {
FooTester() {}
}
TEST_P(FooTester, TestCoolFeature) {
// test my cool feature that needs access to Foo's internal state
}
很好,但为此我必须提供class Foo {
friend class FooTester_TestCoolFeature;
}
我们可以通过宏魔术看到gtest创建了一个我没有明确声明的新类,它是测试类和测试方法名称的组合。表面上这很好,但是有点难看。这将要求我为每个需要此访问权限的新测试方法添加一个新的 friend 类。唯一的实际问题(如果不太可能)是,如果gtest更改其实现并以不同的方式处理类名,则可能会破坏我的测试。
有没有一种方法可以使用一些
#define
魔术或类似方法将所有FooTester*
类声明为friend
? 最佳答案
请勿为此使用friend
类。如果您想从Foo
访问FooTester
,则公开继承它:
class FooTester : public Foo
{
FooTester() {}
}