Я использую API Google Test для модульного тестирования кода C ++.
с примером API тестирования Google, я вижу, что есть опция для тестирования приватных методов с помощью макроса FRIEND_TEST.Также я вижу макросы TEST_P, INSTANTIATE_TEST_CASE_P для параметризованных тестов.
Поэтому я попробовал ниже логику реализовать параметризованный модульный тест для частного метода.Но я получил ошибку с 'Foo :: Bar': не могу получить доступ к приватному члену, объявленному в классе 'Foo' .когда я пытаюсь использовать класс FRIEND_TEST_Test3 для тестирования с параметризованным тестовым макросом TEST_P.
Поэтому, пожалуйста, дайте мне знать возможные способы тестирования приватного метода с параметризованным модульным тестом с помощью макроса Google test.
class Foo {
public:
Foo() {}
private:
int Bar() const { return 1; }
FRIEND_TEST(FRIEND_TEST_Test, TEST);
FRIEND_TEST(FRIEND_TEST_Test2, TEST_F);
FRIEND_TEST(FRIEND_TEST_Test3, TEST_P);
};
TEST(FRIEND_TEST_Test, TEST) {
ASSERT_EQ(1, Foo().Bar());
}
class FRIEND_TEST_Test2 : public ::testing::Test {
public:
Foo foo;
};
TEST_F(FRIEND_TEST_Test2, TEST_F) {
ASSERT_EQ(1, foo.Bar());
}
class CodeLocationForTESTP : public ::testing::TestWithParam<int> {
};
INSTANTIATE_TEST_CASE_P(, CodeLocationForTESTP, ::testing::Values(0,1,2,1,0));
TEST_P(CodeLocationForTESTP, Verify) {
ASSERT_TRUE(0==GetParam());
}
class FRIEND_TEST_Test3 : public ::testing::Test,public ::testing::TestWithParam<int> {
public:
Foo foo;
};
INSTANTIATE_TEST_CASE_P(, FRIEND_TEST_Test3, ::testing::Values(0,1,2,1,0));
TEST_P(FRIEND_TEST_Test3, Verify) {
ASSERT_EQ(1, foo.Bar());
}