web-dev-qa-db-fra.com

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 à ci-dessous ...,

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

Le défi consiste donc maintenant, lors de l’exécution du projet, à indiquer ce que vous souhaitez exécuter dans tous les cas de test? Si je sélectionne Test_Cases_1 et Test_Cases_N. Ensuite, il devrait exécuter ces deux cas de test et exclure tous les autres de Test_Cases_2 to ..... Dans la fenêtre de résultats, j'aimerais également voir les résultats de Test_Cases_1 et Test_Cases_N.

Donc, si je vais voir le GoogleTest, il existe une méthode appelée test_case_to_run_count(); Mais tous les test cases sont en train d'être enregistrés avec la méthode Test_F (). J'ai donc fait beaucoup d'analyses, mais je n'ai toujours pas trouvé de solution. Aidez-moi, s'il vous plaît.

105
Rasmi Ranjan Nayak

Vous pouvez utiliser options avancées pour exécuter des tests Google.

Pour exécuter uniquement certains tests unitaires, vous pouvez utiliser l'option de ligne de commande --gtest_filter=Test_Cases1* avec la valeur expression régulière. Je pense que cela résoudra votre problème.

UPD:

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

  1. Obtenez tous les tests en lançant des tests avec --gtest_list_tests
  2. Analyser ces données dans votre interface graphique
  3. Sélectionnez les cas de test que vous souhaitez exécuter
  4. Lancer l'exécutable de test avec l'option --gtest_filter
152
nogard

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

Sur la console

Vous devriez 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 définir un drapeau filter, comme

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

de sorte que votre fonction principale devient 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 des tests pour plus d’informations sur la syntaxe de la chaîne que vous pouvez utiliser.

73
Jorge Leitão

Enfin, j'ai obtenu une réponse, ::test::GTEST_FLAG(list_tests) = true; // De votre programme, pas de la console w.r.t.

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

Donc, mon exigence est de les utiliser à partir du programme et non de la console.

Updated:-

Enfin, j'ai eu la réponse pour mettre à jour la même chose du 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.

26
Rasmi Ranjan Nayak