Google 测试夹具中的变量

Variables in Google Test Fixtures

为什么TEST_F可以在不使用任何作用域的情况下访问class中的成员变量?例如,

class ABC : public ::testing::Test
{
protected:
     int a;
     int b;
     void SetUp()
     {      
         a = 1;
         b = 1;
     }

     virtual void TearDown()
     { 
     }
};

TEST_F(ABC, Test123)
{
    ASSERT_TRUE(a == b);

}

为什么可以直接访问ab,而不是使用ABC::aABC::b? fixture 是否为 class ABC 创建了一个变量?如果是这样,它应该是 ASSERT_TRUE(abc.a == abc.b); 而不是 ASSERT_TRUE(a == b); 吗?

TEST_F 是一个宏,它定义了一个新的 class publicly 继承自第一个参数(在本例中为 'ABC')。因此它可以访问测试夹具 class.

的所有 public 和受保护成员

您可以在头文件中检查此宏的源代码,以更好地了解它的作用。

TEST_F macro,如果您遵循宏路径,它会引导您... GTEST_TEST_ macro