174 votes

Comment exécuter des cas de test spécifiques dans GoogleTest

J'essaie d'écrire une fonction/méthode pour mon projet, qui demandera à l'utilisateur quels sont les cas de test que vous allez exécuter ? Cela ressemble à ce qui suit...,

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

Maintenant, le défi est le suivant : en exécutant le projet, il devrait me demander quels sont tous les cas de test que vous souhaitez exécuter ? Si je sélectionne Test_Cases_1 y Test_Cases_N . Ensuite, il devrait exécuter ces deux cas de test et exclure tous les autres de la liste. Test_Cases_2 to .... . Dans la fenêtre de résultat, je voudrais aussi voir les résultats de Test_Cases_1 y Test_Cases_N .

Donc, si je regarde le GoogleTest, il y a une méthode appelée test_case_to_run_count() ; Mais tous les test cases sont enregistrés avec la méthode Test_F(). J'ai donc fait beaucoup d'analyses, mais je n'ai toujours pas trouvé de solution. Veuillez m'aider.

240voto

nogard Points 4351

Vous pourriez utiliser options avancées pour exécuter les tests de Google.

Pour n'exécuter que certains tests unitaires, vous pouvez utiliser --gtest_filter=Test_Cases1* avec une valeur qui accepte l'option de ligne de commande * y ? des caractères génériques pour la correspondance avec des tests multiples. Je pense que cela résoudra votre problème.

UPD :

Eh bien, la question était de savoir comment exécuter des cas de test spécifiques. L'intégration de gtest avec votre GUI est une autre chose, que je ne peux pas vraiment commenter, car vous n'avez pas fourni les détails de votre approche. Cependant, je pense que l'approche suivante pourrait être un bon début :

  1. Obtenez tous les cas de test en exécutant les tests avec --gtest_list_tests
  2. Analysez ces données dans votre interface graphique
  3. Sélectionnez les cas de test que vous voulez exécuter
  4. Exécuter l'exécutable de test avec l'option --gtest_filter

129voto

J. C. Leitão Points 2136

Résumer les réponses de Rasmi Ranjan Nayak et de nogard et ajouter une autre option :

Sur la console

Vous devez utiliser le drapeau --gtest_filter comme

--gtest_filter=Test_Cases1*

(Vous pouvez également le faire dans Propriétés|Propriétés de configuration|Débogage|Arguments de commande).

Sur l'environnement

Vous devez définir la variable GTEST_FILTER comme

export GTEST_FILTER = "Test_Cases1*"

Sur le code

Vous devriez mettre un drapeau filter comme

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

de sorte que votre fonction principale devienne quelque chose comme

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

Voir la section Exécution d'un sous-ensemble de tests pour plus d'informations sur la syntaxe de la chaîne que vous pouvez utiliser.

32voto

Rasmi Ranjan Nayak Points 1721

J'ai enfin obtenu une réponse, ::test::GTEST_FLAG(list_tests) = true; //From your program, not w.r.t console.

Si vous souhaitez utiliser --gtest_filter =*; /* =*, =xyz*... etc*/ // Vous devez les utiliser dans Console.

Mon exigence est donc de les utiliser à partir du programme et non de la console.

Updated:-

J'ai finalement obtenu la réponse pour mettre à jour le même dans le programme.

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

Alors, merci pour toutes les réponses.

Vous êtes géniaux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X