Jak uruchomić określone przypadki testowe w GoogleTest

125

Próbuję napisać funkcję / metodę dla mojego projektu, która zapyta użytkownika, które wszystkie przypadki testowe zamierzasz uruchomić? Wygląda jak poniżej ...,

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

Więc teraz wyzwanie polega na tym, że podczas uruchamiania projektu powinno mnie podpowiedzieć, jakie wszystkie przypadki testowe chciałbyś wykonać? Jeśli wybiorę Test_Cases_1i Test_Cases_N. Następnie powinien wykonać te dwa przypadki testowe i wykluczyć wszystkie inne z Test_Cases_2 to ..... W oknie wyników chciałbym również zobaczyć wyniki Test_Cases_1i Test_Cases_N.

Jeśli więc zobaczę GoogleTest, jest metoda o nazwie test_case_to_run_count(); Ale wszystkie test casessą rejestrowane metodą Test_F (). Zrobiłem więc wiele analiz, ale nadal nie znalazłem żadnego rozwiązania. Proszę pomóż mi.

Rasmi Ranjan Nayak
źródło

Odpowiedzi:

181

Możesz użyć zaawansowanych opcji, aby uruchomić testy Google.

Aby uruchomić tylko niektóre testy jednostkowe, możesz użyć --gtest_filter=Test_Cases1*opcji wiersza polecenia z wartością, która akceptuje symbole wieloznaczne *i w ?celu dopasowania do wielu testów. Myślę, że to rozwiąże twój problem.

UPD:

Cóż, chodziło o to, jak uruchomić określone przypadki testowe. Integracja gtest z twoim GUI to kolejna rzecz, której nie mogę naprawdę komentować, ponieważ nie podałeś szczegółów swojego podejścia. Uważam jednak, że następujące podejście może być dobrym początkiem:

  1. Pobierz wszystkie przypadki testowe, uruchamiając testy z --gtest_list_tests
  2. Przeanalizuj te dane w swoim GUI
  3. Wybierz przypadki testowe, które chcesz uruchomić
  4. Uruchom plik wykonywalny testu z opcją --gtest_filter
nogard
źródło
Poleciłbym to, a jeśli potrzebujesz systemu opartego na podpowiedziach, sugerowałbym utworzenie skryptu opakowującego, który pobiera dane wejściowe użytkownika i odpowiednio uruchamia program testowy.
boycy 22.08.12
@nogard: Tak, masz rację, ale moim / naszym celem jest, aby mieć GUI, który będzie miał Treez TestCasesi TestNo. Więc myślisz, że --gtest_filter=..pomoże?
Rasmi Ranjan Nayak
@nogard: Wielkie dzięki za pomoc ... Będę postępować zgodnie z poleceniem. Poinformuję Cię, kiedy skończę.
Rasmi Ranjan Nayak
1
@nogard: Robię to samo, co ty poleciłeś; 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();...}Ale drukuje tylko Testcase i TestNo. i ale nie uruchamia testów. Jak więc mogę teraz przeprowadzić testy?
Rasmi Ranjan Nayak
@RasmiRanjanNayak: Zaproponowałem, aby w ogóle nie zmieniać głównego. Proponuję przeprowadzić testy dwa razy: pierwszy raz z opcją --gtest_list_tests, a następnie drugi dla wybranych testów z opcją --gtest_filter
nogard
92

Podsumowując odpowiedzi @Rasmi Ranjan Nayak i @nogard oraz dodając kolejną opcję:

Na konsoli

Powinieneś użyć flagi --gtest_filter, na przykład

--gtest_filter=Test_Cases1*

(Możesz to również zrobić w Właściwości | Właściwości konfiguracji | Debugowanie | Argumenty polecenia)

Na środowisko

Powinieneś ustawić zmienną GTEST_FILTERjak

export GTEST_FILTER = "Test_Cases1*"

Na kodzie

Powinieneś ustawić flagę filter, na przykład

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

tak, że twoja główna funkcja staje się czymś podobnym

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

Zobacz sekcję Uruchamianie podzbioru testów, aby uzyskać więcej informacji na temat składni łańcucha, którego możesz użyć.

Jorge Leitão
źródło
6
bardzo przydatna część "Na kodzie" !! To jest to, czego szukałem !!
Iero
28

W końcu otrzymałem odpowiedź: ::test::GTEST_FLAG(list_tests) = true;// Z twojego programu, a nie z konsoli.

Jeśli chcesz użyć --gtest_filter =*; /* =*, =xyz*... etc*///, musisz ich użyć w Console.

Tak więc moim wymaganiem jest używanie ich z programu, a nie z konsoli.

Updated:-

W końcu dostałem odpowiedź na aktualizację tego samego w programie.

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

Więc dziękuję za wszystkie odpowiedzi.

Jesteście wspaniali.

Rasmi Ranjan Nayak
źródło