Как сбросить .times, вызванный в параметризованном тесте? - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть параметризованный тест с 2 тестами.Один обычный TEST_F, который также ожидает вызов mock_function и который работает как положено.А другой, который не срабатывает по числу вызовов функции 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), он завершается неудачно, поскольку mock_function вызывается 4x согласно googlemock.хотя функция mock_function называется 2x в function_under_test.Но когда я изменяю его на .times (AtLeast (2)), он работает.

Так что кажется, что счетчик функций для mock_function не сбрасывается между различными параметризованными вызовами.Примечание: это даже происходит, когда в ParamTable есть только 1 кортеж ввода / вывода, поэтому кажется, что даже вызовы mock_function из моего первого тестового примера не были сброшены.

Отсюда мой вопрос: что мне делать, чтобыубедитесь, что он сбрасывается для каждого параметризованного вызова, чтобы я мог использовать .times (2) вместо временного решения .times (AtLeast (2))?

...