C++ Hippomock中Expect调用函数参数中的模板函数
我想隔离C++ Hippomock中Expect调用函数参数中的模板函数,c++,hippomocks,C++,Hippomocks,我想隔离writeMemory,但由于以下错误,无法隔离: ../../Util/UnitTest++/../../UnitTests/KeeperDive_Test.h:66:57:错误:预期表达式mocks.ExpectCall(Skillmock,Skill::writeMemory).With(模板(Skillmock)) 课堂技能 { 受保护的: 模板无效写入内存(常量字符*键,T值) { PY\u错误\u尝试 { skillMemory[键]=(T)值; } PY\u错误\u捕获 }
writeMemory
,但由于以下错误,无法隔离:
../../Util/UnitTest++/../../UnitTests/KeeperDive_Test.h:66:57:错误:预期表达式mocks.ExpectCall(Skillmock,Skill::writeMemory).With(模板(Skillmock))
课堂技能
{
受保护的:
模板无效写入内存(常量字符*键,T值)
{
PY\u错误\u尝试
{
skillMemory[键]=(T)值;
}
PY\u错误\u捕获
}
};
测试(运行)
{
嘲弄;
Skill*Skillmock=mocks.Mock();
ExpectCall(Skillmock,Skill::writeMemory).With(template(Skillmock));
}
您不能期望对模板方法进行调用-只能对该方法的特定实例进行调用。在这种情况下,您也将无法模拟非虚拟类成员,部分原因是该类成员尚未实现,但主要原因是该实例无论如何都将完全内联,并且以后无法模拟。为什么要使用散乱的模板
?
class Skill
{
protected:
template <class T> void writeMemory(const char *key, T value)
{
PY_ERROR_TRY
{
skillMemory[key] = (T)value;
}
PY_ERROR_CATCH
}
};
TEST(run)
{
MockRepository mocks;
Skill *Skillmock = mocks.Mock<Skill>();
mocks.ExpectCall(Skillmock, Skill::writeMemory).With(template<class T>(Skillmock));
}