Ниже приведен пример, иллюстрирующий мою проблему. У меня есть несколько параметризованных 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
?