访问受保护的变量在googletest

问题描述:

我有这个类TESTC即意味着谷歌测试访问受保护的变量在googletest

class testC : public A { }; 

,然后一堆测试的是在同一个文件中。

TEST(test_case_name, test_name) { 
... test body ... 
} 

A的结构是这样

class A{ 

protected: 
    B b; 
public: 
    //constructors 
    //destructor 
    //member functions 

问:我如何可以访问所有TEST(){}功能b通过testC

我试图做一个getter在testC

public: 
    testC getTest(){ 
     testC test; 
     return test; 
    } 

,我也试图与返回一个参考,但没有运气...

+0

你为什么从你的睾丸中获得测试类? – 2014-10-10 20:19:09

+0

按照说明......是否有更优化的方法? – TheGuyWithStreetCred 2014-10-10 20:23:41

+1

@anhoppe对于如何做到这一点有正确的答案,但通常当你遇到这个问题时,你必须问*为什么*你需要它。单元测试应该测试系统的预期行为。如果您需要检查私有成员的行为,那么您需要检查子系统的状态。如果这个子系统需要这样的测试,它通常应该是它自己的类,并有自己的一套单元测试。 – IdeaHat 2014-10-10 20:27:52

我认为你可以使用googletest提供的FRIEND_TEST宏。请参阅Private class members下的高级指南。基本上你必须声明测试是测试代码的朋友。如果我没有弄错,你必须宣布所有想要访问受保护成员的测试的友谊。

UPDATE:谢谢你的改进链接;-)

什么让我很烦,这种方法是,你必须添加FRIEND_TEST声明中的代码测试。但是,如果你想对受保护/私人成员进行测试,那么这就是你必须付出的代价。

+0

我是否需要在testC中创建一个对象,如'private:testC testO;' – TheGuyWithStreetCred 2014-10-10 20:41:15

+1

如果我的代码正确,则TEST(testCaseName,testName)定义不属于testC类。它们不是它的成员,不能访问受保护的成员,无论你是否返回对testC对象的引用或其他内容。测试访问它的唯一方法是向testC类添加FRIEND_TEST(testCaseName,testName)声明。然后测试是一个朋友,并可以访问受保护的和私人成员。但如上所述,这是真的,这通常不是一个好的风格。 – anhoppe 2014-10-10 20:54:00

+1

看看链接。它真的应该解释这个话题。高级指南非常棒!随着一些尝试,你会让你的方式:-) – anhoppe 2014-10-10 20:55:27