Я пытаюсь смоделировать шаблонный метод.
Вот класс, содержащий метод для моделирования:
class myClass
{
public:
virtual ~myClass() {}
template<typename T>
void myMethod(T param);
}
Как можно смоделировать метод myMethod с помощью Google Mock?
В предыдущей версии Google Mock вы могли имитировать только виртуальные функции, см. документацию на странице проекта.
Более поздние версии позволяли имитировать невиртуальные методы , используя то, что они называли внедрением высокопроизводительных зависимостей .
Как говорится в congusbongus
:
Google Mock полагается на добавление переменных-членов для поддержки имитации методов, а поскольку вы не можете создавать переменные-члены шаблона, имитировать функции шаблона невозможно.
Обходной путь от Майкла Харрингтона в ссылке googlegroups из комментариев, заключается в том, чтобы сделать специализированные методы шаблона, которые будут вызывать обычную функцию, которую можно смоделировать. Это не решает общий случай, но будет работать для тестирования.
struct Foo
{
MOCK_METHOD1(GetValueString, void(std::string& value));
template <typename ValueType>
void GetValue(ValueType& value);
template <>
void GetValue(std::string& value) {
GetValueString(value);
}
};