Gmock параметризованные тесты запускаются дважды - PullRequest
0 голосов
/ 02 июня 2018

Вот пример кода:

struct MyFixture: public ::testing::Test
{
};

template <typename param>
struct MyFixtureWithParam: public MyFixture, public ::testing::WithParamInterface<param>
{
};

using MyFixtureWithNumber = MyFixtureWithParam<int>;

TEST_P(MyFixtureWithNumber, Test1)
{
    std::cout << "Test1 with param: " << GetParam() << std::endl;
}

INSTANTIATE_TEST_CASE_P(Test1, MyFixtureWithNumber, ::testing::Values(0,3));

TEST_P(MyFixtureWithNumber, Test2)
{
    std::cout << "Test2 with param: " << GetParam() << std::endl;
}

INSTANTIATE_TEST_CASE_P(Test2, MyFixtureWithNumber, ::testing::Values(5, 7));

Я ожидаю получить 4 теста (2 экземпляра для Test1 и 2 экземпляра для Test2), но выполняется 8 тестов.Зачем?Как это исправить?

1 Ответ

0 голосов
/ 02 июня 2018
INSTANTIATE_TEST_CASE_P(prefix, fixture, generator)

регистрирует тесты, которые должны быть выполнены для каждого параметризованного тестового примера, который использует тот же тип fixture.prefix используется только в именах зданий для параметризованных тестов, которые появляются в выходных данных и могут использоваться с аргументом командной строки --gtest-filter.

Так что, если вы хотите Test1 и Test2чтобы работать с разными наборами значений параметров, вам нужно заставить их быть разными типами приборов:

// ...

struct MyFixtureForTest1 : public MyFixtureWithNumber {};
struct MyFixtureForTest2 : public MyFixtureWithNumber {};

TEST_P(MyFixtureForTest1, Test1)
{
    std::cout << "Test1 with param: " << GetParam() << std::endl;
}

INSTANTIATE_TEST_CASE_P(SmallValues, MyFixtureForTest1, ::testing::Values(0,3));

TEST_P(MyFixtureForTest2, Test2)
{
    std::cout << "Test2 with param: " << GetParam() << std::endl;
}

INSTANTIATE_TEST_CASE_P(LargeValues, MyFixtureForTest2, ::testing::Values(5, 7));
...