YoungJS
YoungJS

Reputation: 33

Variables in Google Test Fixtures

Why TEST_F can access the member variable in a class without using any scopes? e.g.,

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);

}

why it can directly access a and b, instead of using ABC::a or ABC::b? Does the fixture create a variable for class ABC? if so, should it be ASSERT_TRUE(abc.a == abc.b); instead of ASSERT_TRUE(a == b);?

Upvotes: 3

Views: 1841

Answers (1)

Ryan Findley
Ryan Findley

Reputation: 36

TEST_F is a macro which defines a new class publicly inheriting from the first argument (in this case, 'ABC'). So it has access to all public and protected members of the test fixture class.

You can inspect the source for this macro in the header file to get a better idea of what it's doing.

TEST_F macro, which if you follow the macro path leads you to... GTEST_TEST_ macro

Upvotes: 2

Related Questions