Имя MOCK_METHOD должно сопровождаться '::' должно быть именем класса или пространства имен - PullRequest
2 голосов
/ 23 января 2020

Учитывая интерфейс класса Foo:

#ifndef FOO_H
#define FOO_H
#include <string>
class Foo
{
    public:
        Foo() = default;
        virtual ~Foo() = default;
        virtual void bar(std::string msg) = 0;
};
#endif

Его макет:

#ifndef FOO_MOCK_H
#define FOO_MOCK_H
#include "gtest/gtest.h"
#include "gmock/gmock.h"
class MockFoo: public Foo
{
    public:
        MOCK_METHOD(void, bar, (std::string), (override));
};
#endif

И глупый тест:

#include "pch.h"
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "MockFoo.h"

using ::testing::NiceMock;

TEST(SillyTests, Silly)
{
    std::string msg = "Hello, world!";
    NiceMock<MockFoo> mock_foo;
    EXPECT_CALL(mock_foo, bar)
        .Times(1);
    mock_foo.bar(msg);
}

Среди множества ошибок внутренних для gtest и gmock Visual Studio жалуется на MOCK_METHOD(), что "имя, сопровождаемое '::' должно быть именем класса или пространства имен", и что определение функции для MOCK_METHOD не найдено.

Интересно добавление старого вызова функции MOCK_METHODn приводит к той же ошибке.

MOCK_METHOD1(debug, void(std::string msg));

При наведении курсора на MOCK_METHOD отображается несколько подтверждений c, но они не являются правильными. Они включают:

  • "(std::string)" должны быть заключены в круглые скобки (это так)
  • "(override)" должны быть заключены в круглые скобки (опять же, это так)
  • Подпись должна быть типом функции, возможно, возвращаемый тип содержит незащищенную запятую (это тип void, добавление скобок не исправляет это)
  • Этот метод не принимает аргументы "1". Скобки всех типов с незащищенными запятыми

версия gmock - 1.10.0, версия адаптера Google Test - 1.8.1.3.

1 Ответ

1 голос
/ 24 января 2020

Решил это. Причиной было то, что googlemock и googletest не использовали одну и ту же версию. Понижение версии googlemock до версии 1.8.1 решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...