Fixtures et configuration
Partager la configuration des tests
Fixtures et configuration est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Partager la configuration entre les tests
Lorsque plusieurs tests ont besoin des mêmes objets, un dispositif de test vous permet de définir cette configuration une seule fois. Un dispositif de test est une classe qui dérive de ::testing::Test.
Définir un dispositif de test
Les membres du dispositif de test sont accessibles dans chaque test qui l’utilise. SetUp() s’exécute avant chaque test et TearDown() après.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v;
void SetUp() override { v = {1, 2, 3}; }
};Utiliser TEST_F
Les tests qui utilisent un dispositif de test s’écrivent avec TEST_F, en transmettant le nom de la classe du dispositif comme premier argument.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v{1, 2, 3};
};
TEST_F(VectorTest, HasThree) {
EXPECT_EQ(v.size(), 3u);
}
TEST_F(VectorTest, FirstIsOne) {
EXPECT_EQ(v.front(), 1);
}Une nouvelle instance par test
GTest crée un nouvel objet de dispositif de test pour chaque test. Les tests ne partagent jamais d’état mutable ; ils restent donc indépendants et leur ordre n’a pas d’importance.
SetUp ou constructeur
Vous pouvez initialiser les membres dans le constructeur ou dans SetUp(). Utilisez SetUp() lorsque l’initialisation peut lever une exception ou lorsque vous souhaitez appeler des méthodes virtuelles en toute sécurité.
#include <gtest/gtest.h>
class Resource : public ::testing::Test {
protected:
int* data = nullptr;
void SetUp() override { data = new int(10); }
void TearDown() override { delete data; }
};
TEST_F(Resource, HasTen) {
EXPECT_EQ(*data, 10);
}TearDown pour le nettoyage
TearDown() libère les ressources acquises dans SetUp(). Avec des membres gérés par RAII, le destructeur s’en charge souvent automatiquement et vous pouvez ne pas avoir besoin de TearDown().
Configuration au niveau de la suite
Pour les ressources partagées coûteuses, utilisez SetUpTestSuite() et TearDownTestSuite() statiques. Elles s’exécutent une fois par suite, et non une fois par test.
#include <gtest/gtest.h>
class DbTest : public ::testing::Test {
protected:
static void SetUpTestSuite() { /* open shared connection */ }
static void TearDownTestSuite() { /* close it */ }
};Par test ou par suite
Choisissez avec soin.
SetUp/TearDown: par test, isolé et sûrSetUpTestSuite/TearDownTestSuite: par suite, partagé et plus rapide, mais les tests peuvent interférer entre eux
Méthodes utilitaires
Les dispositifs de test peuvent contenir des méthodes utilitaires utilisées par plusieurs tests, afin que chaque test reste centré sur ses assertions.
#include <gtest/gtest.h>
#include <string>
class ParserTest : public ::testing::Test {
protected:
int parse(const std::string& s) { return std::stoi(s); }
};
TEST_F(ParserTest, ParsesNumber) {
EXPECT_EQ(parse("42"), 42);
}Environnement global
Pour une configuration à l’échelle du processus, exécutée une fois avant tout test, enregistrez un ::testing::Environment via AddGlobalTestEnvironment. C’est utile pour la journalisation ou l’initialisation d’un framework.
Garder les tests indépendants
Comme chaque TEST_F reçoit un dispositif de test vierge, ne vous appuyez jamais sur les effets de bord d’un autre test. L’indépendance facilite le diagnostic des échecs et permet d’exécuter les tests en parallèle en toute sécurité.
Vérification rapide
Rappelez-vous le cycle de vie d’un dispositif de test.
Récapitulatif
Vous avez appris à utiliser les dispositifs de test.
- Dérivez de
::testing::Testet utilisezTEST_F SetUp/TearDowns’exécutent pour chaque test ; un nouvel objet est créé à chaque fois- Utilisez
SetUpTestSuitepour les ressources partagées, créées une seule fois par suite - Les utilitaires et les environnements globaux facilitent la gestion des suites plus importantes
Questions Fréquemment Posées
La leçon « Fixtures et configuration » est-elle gratuite ?
Oui — le texte complet de « Fixtures et configuration » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Fixtures et configuration » ?
Partager la configuration des tests Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Fixtures et configuration » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Configurer GTest
- Assertions et correspondants
- Fixtures et configuration
- Simulations avec GMock