Как смоделировать шаблонные методы с помощью Google Mock?

Я пытаюсь смоделировать шаблонный метод.

Вот класс, содержащий метод для моделирования:

class myClass
{
public:
    virtual ~myClass() {}

    template<typename T>
    void myMethod(T param);
}

Как можно смоделировать метод myMethod с помощью Google Mock?

18
задан HaveNoDisplayName 1 December 2015 в 06:53
поделиться

1 ответ

В предыдущей версии 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);
    } 
};
9
ответ дан 30 November 2019 в 09:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: