使用 GMock 模拟具有相同数量输入参数的重载方法
Mocking overloaded methods with the same number of input arguments using GMock
我有一个 class 定义了一个我需要模拟的重载方法。问题是,两个重载都只接受一个参数,GMock 似乎认为调用不明确。
这是一个演示问题的小例子(为了演示过于简单):
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <iostream>
#include <string>
using ::testing::_;
class MyClass
{
public:
virtual ~MyClass() = default;
virtual void PrintValue(const std::string& value) const
{
std::cout << value << std::endl;
}
virtual void PrintValue(const int& value) const
{
std::cout << value << std::endl;
}
};
class MyClassMock : public MyClass
{
public:
MOCK_CONST_METHOD1(PrintValue, void(const std::string&));
MOCK_CONST_METHOD1(PrintValue, void(const int&));
};
TEST(MyTest, MyTest)
{
MyClassMock mock;
EXPECT_CALL(mock, PrintValue(_)).Times(1);
mock.PrintValue(42);
}
int main(int argc, char* argv[])
{
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
在 EXPECT_CALL
行出现编译错误:
error: call of overloaded 'gmock_PrintValue(const testing::internal::AnythingMatcher&)' is ambiguous
EXPECT_CALL(mock, PrintValue(_)).Times(1);
如何让 GMock 正确区分这两个重载,以便调用不再含糊不清?
我遇到了同样的问题并使用 gMock Cookbook's Select Overload section 解决了它。您必须定义匹配器的类型,例如通过写 Matcher<std::string>()
。请记住在上面包含此指令 (using ::testing::Matcher;
).
我有一个 class 定义了一个我需要模拟的重载方法。问题是,两个重载都只接受一个参数,GMock 似乎认为调用不明确。
这是一个演示问题的小例子(为了演示过于简单):
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <iostream>
#include <string>
using ::testing::_;
class MyClass
{
public:
virtual ~MyClass() = default;
virtual void PrintValue(const std::string& value) const
{
std::cout << value << std::endl;
}
virtual void PrintValue(const int& value) const
{
std::cout << value << std::endl;
}
};
class MyClassMock : public MyClass
{
public:
MOCK_CONST_METHOD1(PrintValue, void(const std::string&));
MOCK_CONST_METHOD1(PrintValue, void(const int&));
};
TEST(MyTest, MyTest)
{
MyClassMock mock;
EXPECT_CALL(mock, PrintValue(_)).Times(1);
mock.PrintValue(42);
}
int main(int argc, char* argv[])
{
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
在 EXPECT_CALL
行出现编译错误:
error: call of overloaded 'gmock_PrintValue(const testing::internal::AnythingMatcher&)' is ambiguous
EXPECT_CALL(mock, PrintValue(_)).Times(1);
如何让 GMock 正确区分这两个重载,以便调用不再含糊不清?
我遇到了同样的问题并使用 gMock Cookbook's Select Overload section 解决了它。您必须定义匹配器的类型,例如通过写 Matcher<std::string>()
。请记住在上面包含此指令 (using ::testing::Matcher;
).