我希望多个文件中的多个测试能够从另一个文件调用单独编译的实用程序方法,该方法为每个测试设置相同的期望。但是,Hippomocks 在为不同源文件中的同一个 MockRepository 设置期望时似乎存在问题。
这是一个简单的例子:
file1.cpp 是:
void SetOtherExpectations(MockRepository &mocks);
int Method45()
{
return -45;
}
int Method88()
{
return -88;
}
TEST(TestOfSettingValueInAnotherSourceFile)
{
MockRepository mocks;
mocks.OnCallFunc(Method45).Return(45);
mocks.OnCallFunc(Method88).Return(88);
SetOtherExpectations(mocks);
testEqual(45, Method45()); // Failed Condition: (Expected: <45>, actual: <8888>
}
file2.cpp 是:
int MethodInt(int)
{
return -145;
}
int MethodChar(char)
{
return -188;
}
void SetOtherExpectations(testFramework::MockRepository &mocks)
{
mocks.OnCallFunc(MethodChar).Return(8888); // Line A
mocks.OnCallFunc(MethodInt).Return(9999); // Line B
}
如果我交换行 A 和 B,Method45 调用现在返回 9999。事实证明,当进行 Method45 调用时,搜索匹配期望会在 file2 中找到第一个模拟函数,然后再从 file1 中找到正确的模拟函数。
MockRepository 中有 4 种模拟方法,但 Hippomocks 会funcIndex
在每个源文件的基础上分配一个值,因为它使用__COUNTER__
预处理器变量(在每个源文件中从 0 开始,每次在该文件中使用时递增 1)源文件)在对 RegisterExpect 的调用中。因此,单独的源文件中的每个后续期望设置“隐藏”了使用该索引设置的所有先前期望。
似乎我需要将所有将期望设置到每个单独编译的源文件中的实用程序函数作为内联代码包含在内,这不是一个很好的解决方案。有没有其他方法可以做到这一点?