C++
Test d'unité en C ++
Recherche…
Introduction
Le test unitaire est un niveau de test logiciel qui valide le comportement et l'exactitude des unités de code.
En C ++, les "unités de code" font souvent référence à des classes, des fonctions ou des groupes de l'un ou de l'autre. Les tests unitaires sont souvent effectués à l'aide de "frameworks de test" spécialisés ou de "bibliothèques de test" qui utilisent souvent des modes de syntaxe ou d'utilisation non triviaux.
Cette rubrique passera en revue différentes stratégies et bibliothèques ou frameworks de tests unitaires.
Test Google
Google Test est un framework de test C ++ géré par Google. Cela nécessite de construire la bibliothèque gtest
et de la lier à votre structure de test lors de la création d'un fichier de gtest
test.
Exemple minimal
// main.cpp
#include <gtest/gtest.h>
#include <iostream>
// Google Test test cases are created using a C++ preprocessor macro
// Here, a "test suite" name and a specific "test name" are provided.
TEST(module_name, test_name) {
std::cout << "Hello world!" << std::endl;
// Google Test will also provide macros for assertions.
ASSERT_EQ(1+1, 2);
}
// Google Test can be run manually from the main() function
// or, it can be linked to the gtest_main library for an already
// set-up main() function primed to accept Google Test test cases.
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
// Build command: g++ main.cpp -lgtest
Capture
Catch est une bibliothèque en-tête uniquement qui vous permet d'utiliser à la fois le style de test d'unité TDD et BDD .
L'extrait suivant provient de la page de documentation de Catch sur ce lien :
SCENARIO( "vectors can be sized and resized", "[vector]" ) {
GIVEN( "A vector with some items" ) {
std::vector v( 5 );
REQUIRE( v.size() == 5 );
REQUIRE( v.capacity() >= 5 );
WHEN( "the size is increased" ) {
v.resize( 10 );
THEN( "the size and capacity change" ) {
REQUIRE( v.size() == 10 );
REQUIRE( v.capacity() >= 10 );
}
}
WHEN( "the size is reduced" ) {
v.resize( 0 );
THEN( "the size changes but not capacity" ) {
REQUIRE( v.size() == 0 );
REQUIRE( v.capacity() >= 5 );
}
}
WHEN( "more capacity is reserved" ) {
v.reserve( 10 );
THEN( "the capacity changes but not the size" ) {
REQUIRE( v.size() == 5 );
REQUIRE( v.capacity() >= 10 );
}
}
WHEN( "less capacity is reserved" ) {
v.reserve( 0 );
THEN( "neither size nor capacity are changed" ) {
REQUIRE( v.size() == 5 );
REQUIRE( v.capacity() >= 5 );
}
}
}
}
Idéalement, ces tests seront rapportés comme suit lors de l'exécution:
Scenario: vectors can be sized and resized Given: A vector with some items When: more capacity is reserved Then: the capacity changes but not the size