How to make google-test classes friends with my classes?
I heard there is a possibility to enable google-test TestCase classes friends to my classes, thus enabling tests to access my private/protected members.
How to accomplish that?
Solution 1:
Try this (straight from Google Test docs...):
FRIEND_TEST(TestCaseName, TestName);
For example:
// foo.h
#include <gtest/gtest_prod.h>
// Defines FRIEND_TEST.
class Foo {
...
private:
FRIEND_TEST(FooTest, BarReturnsZeroOnNull);
int Bar(void* x);
};
// foo_test.cc
...
TEST(FooTest, BarReturnsZeroOnNull) {
Foo foo;
EXPECT_EQ(0, foo.Bar(NULL));
// Uses Foo's private member Bar().
}
Solution 2:
I know this is old but I was searching for the same answer today. "gtest_prod.h" just introduces a simple macro to reference test classes.
#define FRIEND_TEST(test_case_name, test_name)\
friend class test_case_name##_##test_name##_Test
So FRIEND_TEST(FooTest, BarReturnsZeroOnNull);
is equivalent to:
friend class FooTest_BarReturnsZeroOnNull_Test;
This works because each test is its own class as mentioned in the previous answer.