访问受保护的变量在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;
}
,我也试图与返回一个参考,但没有运气...
我认为你可以使用googletest提供的FRIEND_TEST宏。请参阅Private class members下的高级指南。基本上你必须声明测试是测试代码的朋友。如果我没有弄错,你必须宣布所有想要访问受保护成员的测试的友谊。
UPDATE:谢谢你的改进链接;-)
什么让我很烦,这种方法是,你必须添加FRIEND_TEST声明中的代码测试。但是,如果你想对受保护/私人成员进行测试,那么这就是你必须付出的代价。
我是否需要在testC中创建一个对象,如'private:testC testO;' – TheGuyWithStreetCred 2014-10-10 20:41:15
如果我的代码正确,则TEST(testCaseName,testName)定义不属于testC类。它们不是它的成员,不能访问受保护的成员,无论你是否返回对testC对象的引用或其他内容。测试访问它的唯一方法是向testC类添加FRIEND_TEST(testCaseName,testName)声明。然后测试是一个朋友,并可以访问受保护的和私人成员。但如上所述,这是真的,这通常不是一个好的风格。 – anhoppe 2014-10-10 20:54:00
看看链接。它真的应该解释这个话题。高级指南非常棒!随着一些尝试,你会让你的方式:-) – anhoppe 2014-10-10 20:55:27
你为什么从你的睾丸中获得测试类? – 2014-10-10 20:19:09
按照说明......是否有更优化的方法? – TheGuyWithStreetCred 2014-10-10 20:23:41
@anhoppe对于如何做到这一点有正确的答案,但通常当你遇到这个问题时,你必须问*为什么*你需要它。单元测试应该测试系统的预期行为。如果您需要检查私有成员的行为,那么您需要检查子系统的状态。如果这个子系统需要这样的测试,它通常应该是它自己的类,并有自己的一套单元测试。 – IdeaHat 2014-10-10 20:27:52