我想在谷歌测试中模拟myFunction,但这两个模板有问题。
template <class Outer>
class MyClass{
template <class T>
void myFunction(const int a, T * b);
};
首先,Outer
模板类型在这里不是问题,因为它没有在myFunction
签名中使用
要处理类型T
,您需要对测试期间使用的所有类型完全专门化模拟方法
假设您想用T=std::string
:测试该方法
template <class Outer>
class MyClassMock {
public:
MOCK_METHOD(void, myFunction, (const int, std::string*));
template <class T>
void myFunction(const int a, T* b);
template <>
void myFunction(const int a, std::string* b)
{
myFunction(a, b);
}
};
如果你的测试功能将有这样的签名:
template <typename TMyClass>
void UseMyClassWithString(TMyClass& i_value)
{
std::string t;
i_value.myFunction(5, &t);
}
结果测试可能看起来像这样:
TEST(UseMyClass, ShouldCallMyFunction)
{
MyClassMock<size_t> mock;
EXPECT_CALL(mock, myFunction).Times(1);
UseMyClassWithString(mock);
}
这里的Outer
类型是size_t
,它只用于创建mock对象。