我有一个带有2个测试用例的参数化测试。一个正常的TEST_F,它也期望调用嘲笑函数,并且按预期方式工作。另一个失败了,其调用mock_function的次数失败,如下所示:
TEST_P( ParameterizedFixtureClass, TestName )
{
int in1 = std::tr1::get<0>(GetParam());
int in2 = std::tr1::get<1>(GetParam());
bool exp_out = std::tr1::get<2>(GetParam());
bool act_out = False;
EXPECT_CALL(mock_impl, mock_function(_,_,_,_))
//.times(2); <--Fails
.times(AtLeast(2)); // <-- Works
function_under_test( in1, in2, &act_out );
ASSERT_EQ( exp_out, act_out ) << "Unexpected actual output" << std::endl;
}
std::tr1::tuple<int, int, bool> const ParamTable[] = {
// in1 in2 exp_out
make_tuple( 12, 4, FALSE ),
make_tuple( 15, 0, FALSE ),
make_tuple( 15, 4, TRUE )
};
INSTANTIATE_TEST_CASE_P( TestWithParameters, ParameterizedFixtureClass,
::testing::ValuesIn( ParamTable) );
当用.times(2)调用测试用例时,它失败了,因为根据googlemock,mock_function被调用为4x,尽管在function_under_test中将该嘲笑函数称为2x。 但是当我将其更改为.times(AtLeast(2))时,它就可以工作。
因此,似乎在不同的参数化调用之间未重置嘲笑函数的函数计数器。
注意:甚至在ParamTable中只有1个输入/输出元组时,也会发生这种情况,因此,即使从我的第一个测试用例对mock_function的调用似乎都没有被重置。
我的问题是:我应该怎么做才能确保它为每个参数化调用重置,以便我可以使用.times(2)而不是替代方法.times(AtLeast(2))?