Catch2 est principalement un framework de tests unitaires pour C++, mais il fournit également des fonctionnalités de base de micro-benchmarking et de simples macros BDD.
Le principal avantage de Catch2 est que son utilisation est à la fois simple et naturelle. Les noms de tests ne doivent pas nécessairement être des identifiants valides, les assertions ressemblent à des expressions booléennes C++ normales et les sections fournissent un moyen agréable et local de partager du code de configuration et de démontage dans les tests.
Exemple de test unitaire
# include < catch2/catch_test_macros.hpp >
# include < cstdint >
uint32_t factorial ( uint32_t number ) {
return number <= 1 ? number : factorial (number- 1 ) * number;
}
TEST_CASE ( " Factorials are computed " , " [factorial] " ) {
REQUIRE ( factorial ( 1 ) == 1 );
REQUIRE ( factorial ( 2 ) == 2 );
REQUIRE ( factorial ( 3 ) == 6 );
REQUIRE ( factorial ( 10 ) == 3'628'800 );
}
Exemple de microbenchmark
# include < catch2/catch_test_macros.hpp >
# include < catch2/benchmark/catch_benchmark.hpp >
# include < cstdint >
uint64_t fibonacci ( uint64_t number) {
return number < 2 ? number : fibonacci (number - 1 ) + fibonacci (number - 2 );
}
TEST_CASE ( " Benchmark Fibonacci " , " [!benchmark] " ) {
REQUIRE ( fibonacci ( 5 ) == 5 );
REQUIRE ( fibonacci ( 20 ) == 6'765 );
BENCHMARK ( " fibonacci 20 " ) {
return fibonacci ( 20 );
};
REQUIRE ( fibonacci ( 25 ) == 75'025 );
BENCHMARK ( " fibonacci 25 " ) {
return fibonacci ( 25 );
};
}
Notez que les benchmarks ne sont pas exécutés par défaut, vous devez donc les exécuter explicitement avec la balise [!benchmark]
.
Vous êtes sur la branche devel
, où la version v3 est en cours de développement. La v3 apporte de nombreux changements importants, le plus important étant que Catch2 n'est plus une bibliothèque à en-tête unique. Catch2 se comporte désormais comme une bibliothèque normale, avec plusieurs en-têtes et une implémentation compilée séparément.
La documentation est progressivement mise à jour pour prendre en compte ces changements, mais ce travail est actuellement toujours en cours.
Pour migrer des versions v2 vers la v3, vous devriez consulter notre documentation. Il fournit des directives simples pour démarrer et rassemble les problèmes de migration les plus courants.
Pour la version majeure précédente de Catch2, consultez la branche v2.x
ici sur GitHub.
Cette documentation comprend ces trois parties :