C++ 接受者和接受者vs FRIEND_测试

C++ 接受者和接受者vs FRIEND_测试,c++,googletest,gmock,C++,Googletest,Gmock,我知道这对UT来说不是很好的课堂设计,但是 如果有需要测试的受保护变量,那么使用FRIEND_TEST在测试中获取/设置这些变量会更好吗?或者我应该(为每个变量)创建getter和setter吗 前 声明一个FRIEND_测试不需要太多开销,就像我为每个==6个新方法创建getter和setter一样!但更正确的解决方案是什么 FREIND_测试不是一个好的解决方案,因为您无法真正控制谁可以访问受保护的成员 您可以将测试类定义为tester类的内部类。仅在测试生成上启用此嵌套 FREIND_测试

我知道这对UT来说不是很好的课堂设计,但是

如果有需要测试的受保护变量,那么使用FRIEND_TEST在测试中获取/设置这些变量会更好吗?或者我应该(为每个变量)创建getter和setter吗

声明一个FRIEND_测试不需要太多开销,就像我为每个==6个新方法创建getter和setter一样!但更正确的解决方案是什么

  • FREIND_测试不是一个好的解决方案,因为您无法真正控制谁可以访问受保护的成员
  • 您可以将测试类定义为tester类的内部类。仅在测试生成上启用此嵌套
  • FREIND_测试不是一个好的解决方案,因为您无法真正控制谁可以访问受保护的成员
  • 您可以将测试类定义为tester类的内部类。仅在测试生成上启用此嵌套

  • 如果您只需要一个类就可以访问受保护的成员,请使用friends类。这是C++中的一个绝对规则。 向类中添加getter和setter只会增加开销,在最好的情况下,编译器会删除它


    如果您需要有关好友类的更多信息,链接将非常有用。

    如果您只需要一个类就可以访问受保护的成员,请使用好友类。这是C++中的一个绝对规则。 向类中添加getter和setter只会增加开销,在最好的情况下,编译器会删除它


    如果您想了解有关好友类的更多信息,链接将非常有用。

    但好友测试是否仅针对每个测试用例?恶意用户可以定义测试类并使用它访问您的类。恶意用户仍然可以访问私人数据,即使没有
    好友
    :-/但是,FRIEND\u测试是否仅针对每个测试用例?恶意用户可以定义测试类并使用它访问您的类。恶意用户仍然可以访问私有数据,即使没有
    FRIEND
    :-/这感觉就像你想测试你的类中一些从外部看不到的内部内容。我怀疑这是否是个好主意。最后,只要不违反外部承诺的行为,就可以更改实现。(如果不想更新所有呼叫者)。奇怪的是,这样的改变会破坏你的测试。感觉上你想测试你的类中一些外部无法观察到的内部。我怀疑这是否是个好主意。最后,只要不违反外部承诺的行为,就可以更改实现。(如果不想更新所有呼叫者)。奇怪的是,这样的变化会打破你的测试。
    class Dog
    {
    public:
    //some methods
    
    protected:
       int age;
       std::string color;
       std::string breed
    }