Nach dem Namen MOCK_METHOD muss '::' ein Klassen- oder Namespace-Name sein


esilk

Bei einer Schnittstellenklasse 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

Sein Schein:

#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

Und ein dummer Test:

#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);
}

Unter einer Reihe von Fehlern innerhalb von gtest und gmock beschwert sich Visual Studio darüber, MOCK_METHOD()dass "Name gefolgt von '::' ein Klassen- oder Namespace-Name sein muss" und dass keine Funktionsdefinition für MOCK_METHODgefunden wird.

Interessanterweise führt das Hinzufügen des alten Funktionsaufrufs MOCK_METHODnzum gleichen Fehler.

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

Wenn Sie mit der Maus über die MOCK_METHODShows fahren, werden mehrere statische Asserts angezeigt, die jedoch nicht korrekt zu sein scheinen. Sie beinhalten:

  • "(std::string)" sollte in Klammern stehen (es ist)
  • "(override)" sollte in Klammern stehen (wieder ist es)
  • Die Signatur muss ein Funktionstyp sein, möglicherweise enthält der Rückgabetyp ein ungeschütztes Komma (dies ist ein Typ void, das Hinzufügen von Klammern korrigiert dies nicht).
  • Diese Methode akzeptiert keine "1" -Argumente. Klammern Sie alle Typen mit ungeschützten Kommas in Klammern

Die gmock-Version ist 1.10.0, die Google Test-Adapterversion ist 1.8.1.3.

esilk

Ich habe es gelöst. googlemock und googletest, die nicht dieselbe Version hatten, waren die Ursache. Durch das Herabstufen von googlemock auf Version 1.8.1 wurde das Problem behoben.

Verwandte Artikel


name muss ein Namespace-Name sein Visual Studio Error

Toshan Ich versuche, den folgenden Code auszuführen und das RGB-Bild in ein YCbCr-Farbmodell zu konvertieren. Beim Erstellen dieses Codesegments wird jedoch der obige Fehler ausgegeben. Ich habe einen Screenshot angehängt. Können Sie das verweisen und mir eine

'Text muss ein Unicode oder Byte sein'

Verknüpfung Ich mache ein 2D-Plattformspiel in Python und habe es geschafft, alles zum Laufen zu bringen, abgesehen von der Anzeige wichtiger Attribute wie der Spielergesundheit. Ich habe die Gesundheit des Spielers erfolgreich extrahiert, aber wenn ich versuc