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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow