如何重置参数化测试中调用的.times?

时间:2018-09-25 11:36:07

标签: parameterized googlemock

我有一个带有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))?

0 个答案:

没有答案