Pytanie Jak uruchamiać określone przypadki testowe w GoogleTest


Próbuję napisać funkcję / metodę dla mojego projektu, który zapyta użytkownika, które wszystkie testy będą uruchamiane? 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 wyzwaniem jest to, że podczas uruchamiania projektu powinno mi się pokazać jakie są wszystkie przypadki testowe, które chciałbyś wykonać? Jeśli wybiorę Test_Cases_1 i Test_Cases_N. Następnie powinien wykonać te dwa przypadki testowe i powinien wykluczyć wszystkie inne z Test_Cases_2 to ..... W oknie wyników również chciałbym zobaczyć wyniki Test_Cases_1 i Test_Cases_N.

Tak więc, jeśli zobaczę GoogleTest, istnieje metoda o nazwie test_case_to_run_count(); Ale wszystkie test cases są rejestrowane za pomocą metody Test_F (). Zrobiłem wiele analiz, ale nadal nie znalazłem żadnego rozwiązania. Proszę pomóż mi.


76
2017-08-22 15:04


pochodzenie




Odpowiedzi:


Możesz użyć zaawansowane opcje uruchomić testy Google.

Aby uruchomić tylko niektóre testy jednostkowe, możesz użyć --gtest_filter=Test_Cases1* opcja linii poleceń z wartością, która jest wyrażeniem regularnym. Myślę, że rozwiąże to twój problem.

UPD:

Cóż, pytanie brzmiało, jak to zrobić biegać określone przypadki testowe. Integracja CMest z GUI to kolejna rzecz, której naprawdę nie mogę 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. Uzyskaj wszystkie testcases, uruchamiając testy za pomocą --gtest_list_tests
  2. Przetwórz te dane w swoim GUI
  3. Wybierz przypadki testowe, które chcesz uruchomić
  4. Uruchom plik wykonywalny testu za pomocą opcji --gtest_filter

120
2017-08-22 15:10



Polecam to i jeśli potrzebujesz systemu opartego na podpowiedzi, proponuję utworzenie skryptu opakowującego, który pobierze dane od użytkownika i uruchomi program testowy. - boycy
@nogard: Tak, masz rację, ale moim / naszym celem jest posiadanie GUI, który będzie miał Tree z TestCases i TestNo. Myślisz, że tak --gtest_filter=.. pomoże? - Rasmi Ranjan Nayak
@RasmiRanjanNayak: zapoznaj się z aktualizacją mojej odpowiedzi - nogard
@nogard: Bardzo dziękuję za pomoc ... Posunę się naprzód, jak już poleciłeś .. Poinformuję cię, gdy skończę. - Rasmi Ranjan Nayak
@nogard: Robię to samo, co ty kierował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 mogę teraz uruchomić testy? - Rasmi Ranjan Nayak


Podsumowując odpowiedzi @Rasmi Ranjan Nayak i @nogard i dodanie innej opcji:

Na konsoli

Powinieneś użyć flagi --gtest_filter, lubić

--gtest_filter=Test_Cases1*

(Możesz to również zrobić we Właściwościach | Konfiguracja Właściwości | Debugowanie | Argumenty poleceń)

Na środowisko

Powinieneś ustawić zmienną GTEST_FILTER lubić

export GTEST_FILTER = "Test_Cases1*"

Na kodzie

Powinieneś ustawić flagę filter, lubić

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

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

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

Patrz sekcja Uruchamianie podzbioru testów aby uzyskać więcej informacji na temat składni napisu, którego możesz użyć.


48
2017-08-23 12:27



bardzo przydatna część "Na kod" !! Tego właśnie szukałem !! - Iero


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

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

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

Updated:-

Wreszcie otrzymałem odpowiedź na aktualizację tego samego programu.

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

Dzięki za wszystkie odpowiedzi.

Wy, ludzie, jesteście wspaniali.


22