Comparaison des cadres d'essai unitaires c++ [clos]
je sais qu'il y a déjà quelques questions concernant les recommandations pour les cadres de tests unitaires c++, mais toutes les réponses n'ont pas aidé car ils ne font que recommander un des cadres mais ne fournissent aucune information sur une (fonctionnalité) comparaison.
je pense que les cadres les plus intéressants sont CppUnit, Boost et le nouveau cadre de test de Google. On lui a fait une comparaison encore?
10 réponses
voir cette question pour une discussion.
ils recommandent les articles: Explorer le C++ Framework de Test Unitaire de la Jungle , Par Noel Llopis. Et le plus récent: C++ Test de l'Unité de Cadres
Je n'ai pas encore trouvé d'article comparant googletest aux autres frameworks.
un nouveau joueur est Google Test (également connu comme Google c++ Testing Framework ) qui est assez agréable si.
#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 non mortels affirmations
- Facile assertions informatives messages :
ASSERT_EQ(5, Foo(i)) << " where i = " << i;
- Google Test automatiquement détecte vos tests et ne vous oblige pas à les énumérer afin de les exécuter
- facile à étendre votre vocabulaire d'assertion
- Death tests (voir Guide avancé)
-
SCOPED_TRACE
pour boucles de sous-programmes - vous pouvez décider quels tests exécuter
- XML production du rapport d'essai
- Luminaires / Se Moquer De / Modèles ...
je viens de pousser mon propre cadre, CATCH , là-bas. Il est encore en développement, mais je crois qu'il dépasse déjà la plupart des autres cadres. Différentes personnes ont des critères différents, mais j'ai essayé de couvrir la plupart du terrain sans trop de compromis. Jetez un oeil à mon blog lié entrée pour un goûteur. Mes cinq principales caractéristiques sont:
- en-tête seulement
- enregistrement automatique des tests basés sur la fonction et la méthode
- décompose les expressions C++ standard en LHS et RHS (vous n'avez donc pas besoin de toute une famille de macros d'assert).
- prise en charge des sections emboîtées dans un appareil basé sur une fonction
- tests de nom utilisant le langage naturel-les noms de fonction/ méthode sont générés
il comporte également des reliures objectif-C. Le projet est hébergé sur Github
Boost Test Library 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 supporte:
- enregistrement automatique ou enregistrement manuel d'essais
- de Nombreuses assertions
- comparaison automatique de collections "
- différents formats de sortie (y compris XML )
- Luminaires / Modèles ...
PS: j'ai écrit un article à ce sujet qui peut vous aider à commencer: C++ Unit Testing Framework: A Boost test Tutorial
Wikipedia a une liste complète des cadres de test unitaires , avec des tables qui identifient les fonctionnalités supportées ou non.
j'ai récemment publié xUnit++ , spécifiquement comme une alternative à Google Test et la bibliothèque de test Boost (voir le comparaisons ). Si vous connaissez xUnit.Net, vous êtes prêt pour xUnit++.
#include "xUnit++/xUnit++.h"
FACT("Foo and Blah should always return the same value")
{
Check.Equal("0", Foo()) << "Calling Foo() with no parameters should always return \"0\".";
Assert.Equal(Foo(), Blah());
}
THEORY("Foo should return the same value it was given, converted to string", (int input, std::string expected),
std::make_tuple(0, "0"),
std::make_tuple(1, "1"),
std::make_tuple(2, "2"))
{
Assert.Equal(expected, Foo(input));
}
Caractéristiques principales:
- Incroyablement rapide: exécution des tests simultanément .
- Portable
- Automatique inscription au test
- Beaucoup affirmation types (Boost a rien sur xUnit++)
- compare collections nativement.
- Affirmations trois niveaux:
- erreurs fatales
- erreurs non fatales
- mises en garde
- Facile assert "1519140920 exploitation":
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
- Test "1519140920 exploitation":
Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
- Luminaires
- Data-driven tests (Theories)
- sélectionner les essais à exécuter en fonction de:
- correspondance des attributs
- nom substrat matchin
- Suites D'Essai
CPUnit ( http://cpunit.sourceforge.net ) est un framework similaire à Google Test, mais qui repose sur moins de macos (assertions are functions), et où les macros sont préfixées pour éviter les pièges habituels. Les essais ressemblent à:
#include <cpunit>
namespace MyAssetTest {
using namespace cpunit;
CPUNIT_FUNC(MyAssetTest, test_stuff) {
int some_value = 42;
assert_equals("Wrong value!", 666, some_value);
}
// Fixtures go as follows:
CPUNIT_SET_UP(MyAssetTest) {
// Setting up suite here...
// And the same goes for tear-down.
}
}
ils s'enregistrent automatiquement, donc vous n'avez pas besoin de plus que cela. Il suffit alors de compiler et de lancer. Je trouve que l'utilisation de ce cadre ressemble beaucoup à L'utilisation de JUnit, pour ceux qui ont dû passer un certain temps programmation Java. Très sympa!
il y a quelques ressources de test d'unité c++ pertinentes à http://www.progweap.com/resources.html
API santé mentale Checker - framework de test pour les bibliothèques C/C++:
générateur automatique de tests d'Unité de base pour une bibliothèque C/C++ partagée. Il est capable de générer des données d'entrée raisonnables (dans la plupart des cas, mais malheureusement pas tous) pour les paramètres et de composer des cas de test simples ("bon état" ou "superficiel"-qualité) pour chaque fonction de l'API à travers l'analyse des déclarations dans les fichiers d'en-tête.
le la qualité des tests générés permet de vérifier l'absence d'erreurs critiques dans les cas d'utilisation simple. L'outil est capable de construire et d'exécuter les tests générés et de détecter les accidents (segfaults), les arrêts, toutes sortes de signaux émis, le code de retour de programme non-zéro et le programme suspendu.
caractéristiques uniques en comparaison avec CppUnit, Boost et Google Test:
- génération automatique de données d'essai et d'arguments d'entrée (même pour des données complexes types)
- Moderne et hautement réutilisables types spécialisés au lieu de luminaires et de modèles 1519140920"