Je sais qu'il y a déjà quelques questions concernant les recommandations pour les frameworks de tests unitaires C++, mais toutes les réponses n'ont pas aidé, car ils recommandent simplement l'un des frameworks mais ne fournissent aucune information sur une comparaison (fonctionnalité).
Je pense que les frameworks les plus intéressants sont CppUnit, Boost et le nouveau framework de test de Google. Est-ce que quelqu'un a déjà fait une comparaison?
Voir cette question pour discussion.
Ils recommandent les articles: Exploration de la jungle du framework de test unitaire C++ , par Noel Llopis. Et le plus récent: C++ Test Unit Frameworks
Je n'ai pas encore trouvé d'article qui compare googletest aux autres frameworks.
Un nouveau joueur est Google Test (également appelé Framework de test Google C++ ), ce qui est plutôt 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:
ASSERT_EQ(5, Foo(i)) << " where i = " << i;
SCOPED_TRACE
pour les boucles de sous-programmesJe viens de pousser mon propre framework, CATCH , là-bas. Il est encore en développement mais je pense 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 des terrains sans trop de compromis. Jetez un coup d'oeil à mon entrée de blog liée pour un avant-goût. Mes cinq principales fonctionnalités sont:
Il a également des liaisons Objective-C. Le projet est hébergé sur Github
Bibliothèque de tests 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%
}
Ça supporte:
PS: J'ai écrit un article à ce sujet qui pourrait vous aider à démarrer: Framework de test unitaire C++: didacticiel de test Boost
Wikipedia a une liste complète liste des frameworks de tests unitaires , avec des tableaux identifiant les fonctionnalités prises en charge ou non.
J'ai récemment publié xUnit ++ , plus précisément comme alternative à Google Test et à la bibliothèque de tests Boost (consultez 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:
Assert.Equal(-1, foo(i)) << "Failed with i = " << i;
Log.Debug << "Starting test"; Log.Warn << "Here's a warning";
CppUTest - très agréable, cadre léger avec des bibliothèques factices. Cela vaut la peine de regarder de plus près.
CPUnit ( http://cpunit.sourceforge.net ) est un framework similaire à Google Test, mais qui repose sur moins de macos (les assertions sont des fonctions) et où les macros sont préfixées pour éviter les piège macro habituel. Les tests 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, vous n'avez donc pas besoin de plus. Ensuite, il suffit de compiler et d’exécuter. Je trouve l'utilisation de ce framework très semblable à celle de JUnit, pour ceux qui ont dû passer du temps à programmer Java. Très agréable!
Il existe des ressources de test d'unité C++ pertinentes à l'adresse http://www.progweap.com/resources.html
API Sanity Checker - Framework de test pour les bibliothèques C/C++:
Un générateur automatique de tests unitaires de base pour une bibliothèque partagée C/C++. Il est capable de générer des données d'entrée de paramètres raisonnables (dans la plupart des cas, mais malheureusement pas dans tous les cas) et de composer des cas de test simples (de "qualité" ou "superficielle") pour chaque fonction de l'API via l'analyse des déclarations contenues dans l'en-tête. des dossiers.
La qualité des tests générés permet de vérifier l'absence d'erreurs critiques dans des cas d'utilisation simples. L'outil est capable de construire et d'exécuter des tests générés et de détecter les plantages (segfaults), les abandons, toutes sortes de signaux émis, les codes de retour de programmes non nuls et les suspensions de programmes.
Fonctionnalités uniques par rapport à CppUnit, Boost et Google Test: