Frage Wie man bestimmte Testfälle in GoogleTest ausführt


Ich versuche, eine Funktion / Methode für mein Projekt zu schreiben, die fragt, welche Testfälle du ausführen willst? Es sieht aus wie unten ...,

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

So, jetzt ist die Herausforderung, während das Projekt ausgeführt wird, sollte es mich auffordern, was alle Testfälle Sie ausführen möchten? Wenn ich wähle Test_Cases_1 und Test_Cases_N. Dann sollte es diese beiden Testfälle ausführen und alle anderen ausschließen Test_Cases_2 to ..... Im Ergebnisfenster möchte ich auch die Ergebnisse sehen Test_Cases_1 und Test_Cases_N.

Also, wenn ich den GoogleTest sehen werde, gibt es eine Methode namens test_case_to_run_count(); Aber all das test cases werden mit der Methode Test_F () registriert. Also habe ich viele Analysen gemacht, aber immer noch keine Lösung gefunden. Bitte hilf mir.


75
2017-08-22 15:04


Ursprung


Antworten:


Du könntest benutzen erweiterte Optionen um Google-Tests auszuführen.

Um nur einige Komponententests auszuführen, die Sie verwenden könnten --gtest_filter=Test_Cases1* Befehlszeilenoption mit Wert, der regulärer Ausdruck ist. Ich denke, es wird dein Problem lösen.

UPD:

Nun, die Frage war, wie Lauf spezifische Testfälle. Die Integration von gtest mit Ihrer GUI ist eine andere Sache, die ich nicht wirklich kommentieren kann, weil Sie keine Details zu Ihrem Ansatz angegeben haben. Ich glaube jedoch, dass der folgende Ansatz ein guter Anfang sein könnte:

  1. Holen Sie sich alle Testfälle, indem Sie Tests mit ausführen --gtest_list_tests
  2. Parsen Sie diese Daten in Ihre GUI
  3. Wählen Sie die Testfälle aus, die Sie ausführen möchten
  4. Führen Sie die Testausführung mit der Option aus --gtest_filter

120
2017-08-22 15:10



Zusammenfassend @Rasmi Ranjan Nayak und @nogard Antworten und eine weitere Option hinzufügen:

Auf der Konsole

Sie sollten die Flagge verwenden --gtest_filter, mögen

--gtest_filter=Test_Cases1*

(Dies können Sie auch unter Eigenschaften | Konfigurationseigenschaften | Debugging | Befehlsargumente tun.)

Auf die Umwelt

Sie sollten die Variable einstellen GTEST_FILTER mögen

export GTEST_FILTER = "Test_Cases1*"

Auf dem Code

Sie sollten eine Flagge setzen filter, mögen

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

so dass deine Hauptfunktion etwas wie wird

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

Siehe Sektion Ausführen einer Teilmenge der Tests Weitere Informationen zur Syntax der Zeichenfolge, die Sie verwenden können.


47
2017-08-23 12:27



Endlich bekam ich eine Antwort, ::test::GTEST_FLAG(list_tests) = true; // Von Ihrem Programm aus, nicht an der Konsole.

Wenn du es benutzen möchtest --gtest_filter =*;  /* =*, =xyz*... etc*/ // Sie müssen sie in der Konsole verwenden.

Also, meine Anforderung ist es, sie aus dem Programm nicht von der Konsole zu verwenden.

Updated:-

Endlich habe ich die Antwort bekommen, um das gleiche aus dem Programm zu aktualisieren.

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

Also, Danke für alle Antworten.

Ihr Leute seid großartig.


22