我正在使用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() {}
}

10-04 11:03