Использование классов Mock с TYPED_TEST_SUITE_P в gmock и gtest C ++ - PullRequest
1 голос
/ 14 июля 2020

Ниже приведен пример, иллюстрирующий мою проблему. У меня есть несколько параметризованных TYPED_TESTS , которые работают во всех классах, производных от базового класса, и зарегистрированы следующим образом.

REGISTER_TYPED_TEST_SUITE_P(FooSharedTest, Test1, Test2, Test3)  

Я создаю экземпляры тестов для производного класса Bar, который принимает другой аргумент класса ClassA следующим образом. Я издеваюсь над ClassA для тестирования.

std::shared_ptr<MockClassA> mockA = std::make_shared<MockClassA>();

template <> std::shared_ptr<Foo> CreateFoo<Bar>()
{
    return std::make_shared<Bar>(mockA);
}

INSTANTIATE_TYPED_TEST_SUITE_P(BarTest, FooSharedTest, Bar);

}  

Теперь я хочу вернуть разные значения из функций класса MockClassA, выполнив

EXPECT_CALL(*mockA, Func()).Times(1).WillOnce(Return(true));

Я не могу поставить это EXPECT_CALL в TYPED_TEST_P из FooSharedTest, потому что mockA не является областью действия и не должен быть тоже. Тогда как мне передать различные ожидания для фиктивного класса в TYPED_TEST. В настоящее время я делаю это, возвращая одно значение true из MockClassA, но это противоречит цели, поскольку для каждого возвращаемого значения мне придется писать другой класс Mock.

В заключение, вопрос в следующем. как использовать EXPECT_CALL в имитируемых объектах производного класса с TYPED_TEST_P?

...