我希望在多个文件中进行多次测试,能够从另一个文件调用单独编译的实用程序方法,该文件为每个测试设置相同的期望。但是,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中的第一个模拟函数。文件1。
MockRepository中有4个模拟方法,但Hippomocks基于每个源文件分配funcIndex
值,因为它使用__COUNTER__
预处理器变量(在每个源中从0开始)在调用RegisterExpect时,每次在该源文件中使用时,文件并递增1。因此,单独的源文件中的每个后续期望设置“隐藏”使用该索引设置的所有先前期望。
似乎我需要将所有实用程序函数作为内联代码包含在每个单独编译的源文件中,这不是一个很好的解决方案。还有其他办法吗?