Я хочу проверить некоторые частные методы с помощью GoogleTest.
class Foo
{
private:
int bar(...)
}
GoogleTest позволяет несколько способов сделать это.
ВАРИАНТ 1
С FRIEND_TEST:
class Foo
{
private:
FRIEND_TEST(Foo, barReturnsZero);
int bar(...);
}
TEST(Foo, barReturnsZero)
{
Foo foo;
EXPECT_EQ(foo.bar(...), 0);
}
Это подразумевает включение "gtest/gtest.h" в файл исходного файла.
ВАРИАНТ 2
Объявить тестовое устройство как друга для класса и определить аксессоры в приборе:
class Foo
{
friend class FooTest;
private:
int bar(...);
}
class FooTest : public ::testing::Test
{
protected:
int bar(...) { foo.bar(...); }
private:
Foo foo;
}
TEST_F(FooTest, barReturnsZero)
{
EXPECT_EQ(bar(...), 0);
}
ВАРИАНТ 3
Идиома Pimpl.
Есть ли другие способы тестирования частных методов? Каковы некоторые плюсы и минусы каждого варианта?
Спасибо!