195 votes

GoogleTest: comment sauter un test?

Utilisation de Google Test 1.6 (Windows 7, Visual Studio C ++). Comment puis-je désactiver un test donné? (aka comment puis-je empêcher un test de courir). Y a-t-il autre chose que je puisse faire en plus de commenter l'ensemble du test?

274voto

Bill Points 7824

La documentation de Google Test 1.6 suggère :

"Si vous avez un test cassé que vous ne pouvez pas corriger tout de suite, vous pouvez ajouter le préfixe DISABLED_ à son nom. Cela l'exclura de l'exécution."

84voto

Lirik Points 17868

Vous pouvez également exécuter un sous-ensemble de tests, d'après la documentation:

L'exécution d'un sous-ensemble des Tests

Par défaut, Google programme de Test s'exécute tous les tests que l'utilisateur a défini. Parfois, vous voulez seulement un sous-ensemble des tests (par exemple, pour de débogage ou de vérifier rapidement un changement). Si vous définissez la GTEST_FILTER la variable d'environnement ou de l' --gtest_filter drapeau à une chaîne de filtre, Google Test sera uniquement exécuter les tests dont les noms complets (sous la forme de TestCaseName.Nomtest) du filtre.

Le format d'un filtre est un ':'-liste séparée par des caractères génériques (appelé schémas positifs) suivie éventuellement par un " - " et un autre ':'-séparés modèle de liste (appelée les modèles négatifs). Un test-matchs le filtre si et seulement si elle correspond à l'un de positif les motifs, mais ne correspond pas à tous les modèles négatifs.

Un modèle peut contenir des '*' (qui correspond à toute chaîne) ou '?' (correspond à n'importe quel un seul caractère). Pour plus de commodité, le filtre "*- NegativePatterns' peut être aussi écrit "- NegativePatterns'.

Par exemple:

./foo_test Has no flag, and thus runs all its tests.
./foo_test --gtest_filter=* Also runs everything, due to the single match-everything * value.
./foo_test --gtest_filter=FooTest.* Runs everything in test case FooTest.
./foo_test --gtest_filter=*Null*:*Constructor* Runs any test whose full name contains either "Null" or "Constructor".
./foo_test --gtest_filter=-*DeathTest.* Runs all non-death tests.
./foo_test --gtest_filter=FooTest.*-FooTest.Bar Runs everything in test case FooTest except FooTest.Bar. 

Pas la plus belle solution, mais il fonctionne.

7voto

Vijay C Points 1886

Si plusieurs tests sont nécessaires, ne pas passer

 --gtest_filter=-TestName.*:TestName.*TestCase
 

6voto

David C. Bishop Points 2107

Pour une autre approche, vous pouvez envelopper vos tests dans une fonction et l'utilisation normale conditionnelle des contrôles lors de l'exécution pour exécuter uniquement si vous le souhaitez.

#include <gtest/gtest.h>

const bool skip_some_test = true;

bool some_test_was_run = false;

void someTest() {
   EXPECT_TRUE(!skip_some_test);
   some_test_was_run = true;
}

TEST(BasicTest, Sanity) {
   EXPECT_EQ(1, 1);
   if(!skip_some_test) {
      someTest();
      EXPECT_TRUE(some_test_was_run);
   }
}

C'est utile pour moi car je suis en train de faire quelques tests que lorsqu'un système supporte IPv6 double pile.

Techniquement, cette double pile choses ne s'agit pas d'un test unitaire, puisqu'il dépend du système. Mais je ne peux pas vraiment faire tout les tests d'intégration jusqu'à ce que j'ai testé, ils travaillent de toute façon, ce qui assure de ne pas signaler les échecs quand ce n'est pas les codes d'anomalie.

Comme pour le test j'ai des objets de talon que simuler un système de support pour double pile (ou absence de), par la construction de faux sockets.

Le seul inconvénient est que le test de sortie et le nombre de tests de changement qui pourrait causer des problèmes avec quelque chose qui surveille le nombre de tests réussis.

Vous pouvez également utiliser ASSERT_* plutôt que de EQUAL_*. Affirmer le reste de l'épreuve en cas d'échec. Empêche beaucoup de trucs redondants l'objet d'un dumping sur la console.

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