Gtest: запустить test_p внутри 2 test_fs

У меня есть три теста:

TEST_F(lexer, no_data)
{
    // some initial test
}

INSTANTIATE_TEST_CASE_P(parser, lexer, ::testing::Values(/*some list of values*/));
TEST_P(lexer, with_data)
{
    // fixture's static member initialization.
    // tests for each input value
}

TEST_F(lexer, no_more_data)
{
    // final test
}

Проблема в том, что когда я запускаю тест, он запускает TEST_Fs вначале, а затем запускает TEST_P, но мне нужно запустить сначала TEST_F, затем TEST_Ps для каждого входа и, наконец, последнюю версию TEST_F. Примечание. В приспособлении у меня есть статический член, который используется во всех тестовых наборах, но мне нужно, чтобы этот член не инициализировался при запуске первого TEST_F.

0
0
444
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Краткий ответ: нельзя. И не стоит.

Чуть более длинный ответ:
Если ваши тесты зависят друг от друга (или их порядка выполнения), это очень плохая идея - именно по этой причине googletest (и тестовый адаптер Google для Visual Studio) даже предоставляет возможность тасовать вашего порядка выполнения тестового примера, поэтому при каждом запуске теста вы получаете новый заказ, просто чтобы отловить ошибки, которые в противном случае были бы скрыты, например

Тестовый пример № 2 охватывает функцию Foo(), которая должна (среди прочего) установить глобальный флаг Bar на true.
. Вы проверяете это состояние Bar в конце теста, то есть true, и тест проходит успешно.

Тестовый пример № 5 охватывает функцию Baz(), которая должна (помимо прочего) также установить глобальный флаг Bar на true. Однако в Baz() есть ошибка, и делает ли это нет. Вы проверяете это состояние Bar в конце теста ... которое является true, поскольку оно уже было установлено в тестовом примере №2, и тест проходит - вы не удалось, чтобы обнаружить ошибку.

Убедитесь, что каждый из ваших тестовых примеров может запускать независимо друг от друга.

Другие вопросы по теме