330 votes

Comparaison des cadres de tests unitaires c++

Je sais qu'il y a déjà quelques questions concernant des recommandations pour des frameworks de tests unitaires c++, mais toutes les réponses n'ont pas aidé car elles ne font que recommander un des frameworks sans fournir d'informations sur une comparaison (des fonctionnalités).

Je pense que les frameworks les plus intéressants sont CppUnit, Boost et le nouveau framework de test de Google. Quelqu'un a-t-il déjà fait une comparaison ?

4 votes

0 votes

J'ai mon propre cadre de test basé sur le CIO, que j'apprécie davantage parce qu'il n'est pas simplement un clone de ce que font tous les autres, mais qu'il s'attaque à ce que je trouve être tous les problèmes des autres. Vous écrivez des cas de test en dérivant d'une classe, pas en utilisant des macros. Les macros ne sont utilisées que pour les assertions car elles permettent de réfléchir. Sortie personnalisée des statistiques de test. Exécution à partir d'un script IOC, ce qui vous permet de choisir ce que vous testez, à quelle fréquence et avec quels paramètres.

131voto

Wernight Points 6086

Un nouveau joueur est Test Google (également connu sous le nom de Cadre de test C++ de Google ), ce qui est tout de même assez agréable.

#include <gtest/gtest.h>

TEST(MyTestSuitName, MyTestCaseName) {
    int actual = 1;
    EXPECT_GT(actual, 0);
    EXPECT_EQ(1, actual) << "Should be equal to one";
}

Caractéristiques principales :

  • Portable
  • Fatal et assertions non fatales
  • Des assertions faciles et informatives messages : ASSERT_EQ(5, Foo(i)) << " where i = " << i;
  • Test Google automatiquement détecte vos tests et ne vous demande pas de les énumérer pour les exécuter.
  • Faites en sorte qu'il soit facile de étendre votre vocabulaire d'affirmation
  • Tests de décès (voir le guide avancé)
  • SCOPED_TRACE pour les boucles de sous-routine
  • Vous pouvez décider les tests à exécuter
  • XML génération de rapports de test
  • Fixtures / Mock / Modèles ...

3 votes

J'aime beaucoup utiliser google test par rapport à d'autres frameworks, en particulier avec ses capacités de mocking que l'on trouve dans le framework googlemock.

8 votes

Je fournis toutes ces fonctionnalités (bien que certaines ne soient pas encore publiques) et plus encore dans mon nouveau cadre de test, CATCH. Voir ma réponse pour le lien.

2 votes

En le combinant avec le cadre Google C++ Mocking, on obtient un cadre de test xUnit très puissant pour tester le code C++.

128voto

philsquared Points 13547

J'ai juste poussé mon propre cadre, CATCH qui existe. Il est encore en cours de développement mais je pense qu'il surpasse déjà la plupart des autres frameworks. Chaque personne a des critères différents, mais j'ai essayé de couvrir la plupart des domaines sans trop de compromis. Jetez un coup d'œil à l'article de mon blog pour en avoir un avant-goût. Mes cinq fonctionnalités préférées sont les suivantes :

  • En-tête uniquement
  • Enregistrement automatique des tests basés sur les fonctions et les méthodes
  • Décompose les expressions C++ standard en LHS et RHS (afin que vous n'ayez pas besoin de toute une famille de macros assert).
  • Prise en charge des sections imbriquées dans un dispositif basé sur des fonctions
  • Nommez les tests en utilisant le langage naturel - les noms des fonctions et des méthodes sont générés.

Il dispose également de liaisons avec Objective-C. Le projet est hébergé sur Github

0 votes

Veuillez envisager d'ajouter CHECK_FLASE y REQUIRE_FLASE macros.

7 votes

Le meilleur cadre à mon avis.

3 votes

doctest est ma réimplémentation de Catch, avec une attention particulière pour la vitesse de compilation. FAQ pour voir comment ils diffèrent

108voto

Sam Saffron Points 56236

Voir cette question pour une discussion.

Ils recommandent les articles : Exploration du cadre de tests unitaires C++ Jungle par Noel Llopis. Et le plus récent : Cadres d'unités de test C++

Je n'ai pas encore trouvé d'article qui compare googletest aux autres frameworks.

1 votes

Comme je l'ai écrit : toutes les réponses se contentent de recommander l'un des cadres, sans le comparer à un autre.

0 votes

Vous n'êtes pas non plus satisfait de l'article ?

8 votes

Une critique : l'article, bien que bon, date de 2004 et n'inclut pas le test Google.

55voto

Wernight Points 6086

Bibliothèque de test Boost est un très bon choix, surtout si vous utilisez déjà Boost.

// TODO: Include your class to test here.
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(MyTestCase)
{
    // To simplify this example test, let's suppose we'll test 'float'.
    // Some test are stupid, but all should pass.
    float x = 9.5f;

    BOOST_CHECK(x != 0.0f);
    BOOST_CHECK_EQUAL((int)x, 9);
    BOOST_CHECK_CLOSE(x, 9.5f, 0.0001f); // Checks differ no more then 0.0001%
}

Il prend en charge :

  • Automatique ou l'enregistrement des tests manuels
  • De nombreuses affirmations
  • Comparaison automatique des collections
  • Différents formats de sortie (y compris XML )
  • Fixtures / Modèles ...

PS : J'ai écrit un article à ce sujet qui peut vous aider à vous lancer : Cadre de test unitaire C++ : Un tutoriel sur les tests Boost

0 votes

J'avais l'habitude d'utiliser le test Boost et je l'aimais bien, sauf qu'il semblait changer de manière significative entre les versions. Il était déjà assez difficile de vendre des tests unitaires à mon client sans avoir à passer plus de temps (et d'argent) à corriger les tests lorsque l'API changeait, qu'à corriger le code qu'il était censé tester. Finalement, je l'ai abandonné et j'ai écrit le mien - c'était il y a environ 5 ans.

27voto

John Deters Points 2795

Wikipedia propose une liste complète liste des frameworks de tests unitaires avec des tableaux qui identifient les caractéristiques prises en charge ou non.

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