Nach dem Namen MOCK_METHOD muss '::' ein Klassen- oder Namespace-Name sein
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_METHOD
gefunden wird.
Interessanterweise führt das Hinzufügen des alten Funktionsaufrufs MOCK_METHODn
zum gleichen Fehler.
MOCK_METHOD1(debug, void(std::string msg));
Wenn Sie mit der Maus über die MOCK_METHOD
Shows 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.
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.