Как запустить определенные тестовые примеры в GoogleTest

125

Я пытаюсь написать функцию / метод для своего проекта, который спросит у пользователя, какие все тестовые примеры вы собираетесь запустить? Это похоже на ниже ...,

Test_Cases_1
         |_TestNo1
         |_TestNo2....so on
Test_Cases_2
         |_TestNo1
         |_TestNo2....so on
....
....so on
Test_Cases_N
         |_TestNo1
         |_TestNo2....so on

Итак, теперь проблема в том, что при запуске проекта он должен подсказывать мне, какие все тестовые примеры вы хотели бы выполнить? Если я выберу Test_Cases_1и Test_Cases_N. Затем он должен выполнить эти два тестовых примера и исключить все остальные из Test_Cases_2 to ..... В окне результатов я также хотел бы увидеть результаты Test_Cases_1и Test_Cases_N.

Итак, если я увижу GoogleTest, это вызовет метод test_case_to_run_count(); Но все test casesони регистрируются методом Test_F (). Итак, я провел много анализа, но так и не нашел решения. Пожалуйста, помогите мне.

Расми Ранджан Наяк
источник

Ответы:

181

Вы можете использовать расширенные параметры для запуска тестов Google.

Для запуска только несколько модульных тестов можно использовать --gtest_filter=Test_Cases1*командную строку параметр со значением , который принимает *и ?подстановочные знаки для сопоставления с несколькими тестами. Думаю, это решит вашу проблему.

UPD:

Что ж, вопрос был в том, как запускать конкретные тестовые примеры. Интеграция gtest с вашим графическим интерфейсом - это еще одна вещь, которую я не могу комментировать, потому что вы не предоставили подробностей своего подхода. Однако я считаю, что следующий подход может быть хорошим началом:

  1. Получите все тестовые наборы, запустив тесты с --gtest_list_tests
  2. Разберите эти данные в свой графический интерфейс
  3. Выберите тестовые примеры, которые вы хотите запустить
  4. Запустить тестовый исполняемый файл с опцией --gtest_filter
nogard
источник
Я бы порекомендовал это, и если вам нужна система на основе подсказок, я бы предложил создать сценарий-оболочку, который получает ввод пользователя и соответственно запускает тестовую программу.
boycy
@nogard: Да, вы правы, но моя / наша цель состоит в том, чтобы иметь графический интерфейс, который будет иметь Treeв TestCasesи TestNo. Как думаете --gtest_filter=.., поможет?
Расми Ранджан Наяк,
@nogard: Большое спасибо за помощь ... Я продолжу, как вы указали ... Я дам вам знать, как только закончу.
Расми Ранджан Наяк,
1
@nogard: Я делаю то же, что и ты; int main(int argc, char **argv) { //::testing::GTEST_FLAG(list_tests) = true; // For Testing InitGoogleTest(&argc, argv); ::testing::GTEST_FLAG(list_tests) = true; ........ RUN_ALL_TEST();...}Но он печатает только Testcase и TestNo. и но он не запускает тесты. Итак, как мне теперь запустить тесты?
Расми Ранджан Наяк,
@RasmiRanjanNayak: Я предложил вообще не менять основное. Я предлагаю запустить тесты дважды: первый раз запустить с --gtest_list_tests, затем второй раз запустить выбранные тесты с опцией --gtest_filter
nogard
92

Обобщая ответы @Rasmi Ranjan Nayak и @nogard и добавляя еще один вариант:

На консоли

Вы должны использовать флаг --gtest_filter, например

--gtest_filter=Test_Cases1*

(Вы также можете сделать это в Свойства | Свойства конфигурации | Отладка | Аргументы команд)

Об окружающей среде

Вы должны установить переменную GTEST_FILTERкак

export GTEST_FILTER = "Test_Cases1*"

О коде

Вы должны установить флаг filter, например

::testing::GTEST_FLAG(filter) = "Test_Cases1*";

так что ваша основная функция становится чем-то вроде

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::GTEST_FLAG(filter) = "Test_Cases1*";
    return RUN_ALL_TESTS();
}

См. Раздел « Выполнение подмножества тестов» для получения дополнительной информации о синтаксисе строки, которую вы можете использовать.

Хорхе Лейтао
источник
6
очень полезная часть "О коде" !! Это то, что я искал !!
Iero
28

Наконец я получил ответ: ::test::GTEST_FLAG(list_tests) = true;// Из вашей программы, а не из консоли.

Если вы хотите использовать --gtest_filter =*; /* =*, =xyz*... etc*///, вам нужно использовать их в Console.

Итак, мое требование - использовать их из программы, а не из консоли.

Updated:-

Наконец я получил ответ на то, чтобы обновить то же самое из программы.

 ::testing::GTEST_FLAG(filter) = "*Counter*:*IsPrime*:*ListenersTest.DoesNotLeak*";//":-:*Counter*";
      InitGoogleTest(&argc, argv);
RUN_ALL_TEST();

Итак, спасибо за все ответы.

Вы молодцы.

Расми Ранджан Наяк
источник