Як запустити конкретні тестові випадки в 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: Так, ви маєте рацію, але моя / наша мета полягає в тому, щоб мати графічний інтерфейс, який буде мати Treeв TestCasesі TestNo. Отже, ви думаєте --gtest_filter=.., допоможе?
Rasmi Ranjan Nayak

@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: Я запропонував взагалі не змінювати головне. Я пропоную два рази запустити тести: 1-й раз запустити з --gtest_list_tests, потім 2-й запустити для вибраних тестів з опцією --gtest_filter
нога

91

Узагальнення відповідей @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
дуже корисна частина "Про код" !! Це те, що я шукав !!
Ієро

28

Нарешті я отримав певну відповідь, ::test::GTEST_FLAG(list_tests) = true;// Від вашої програми, а не консолі wrt.

Якщо ви хочете скористатися --gtest_filter =*; /* =*, =xyz*... etc*/// Вам потрібно використовувати їх у консолі.

Отже, моя вимога - використовувати їх з програми, а не з консолі.

Updated:-

Нарешті я отримав відповідь за оновлення того самого в програмі.

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

Отже, дякую за всі відповіді.

Ви люди чудові.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.