Fixture e configurazione
Condividere la configurazione dei test
Fixture e configurazione è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Condividere la configurazione tra i test
Quando diversi test richiedono gli stessi oggetti, una fixture consente di definire la configurazione una sola volta. Una fixture è una classe che deriva da ::testing::Test.
Definire una fixture
I membri della fixture sono accessibili in ogni test che la utilizza. SetUp() viene eseguito prima di ogni test; TearDown() viene eseguito dopo.
#include <gtest/gtest.h>
#include <vector>
class VectorTest : public ::testing::Test {
protected:
std::vector<int> v;
void SetUp() override { v = {1, 2, 3}; }
};Utilizzare TEST_F
I test che utilizzano una fixture si scrivono con TEST_F, passando il nome della classe della fixture come primo argomento.
#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);
}Una nuova istanza per ogni test
GTest crea un nuovo oggetto fixture per ogni test. I test non condividono mai lo stato mutabile, quindi rimangono indipendenti e l'ordine non è importante.
SetUp e costruttore a confronto
È possibile inizializzare i membri nel costruttore o in SetUp(). Utilizzi SetUp() quando l'inizializzazione può generare eccezioni o quando desidera chiamare metodi virtuali in sicurezza.
#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 per la pulizia
TearDown() rilascia le risorse acquisite in SetUp(). Con membri RAII, spesso se ne occupa automaticamente il distruttore e potrebbe non essere necessario usare TearDown().
Configurazione a livello di suite
Per le risorse condivise costose, utilizzi SetUpTestSuite() e TearDownTestSuite() statici. Vengono eseguiti una volta per suite, non una volta per test.
#include <gtest/gtest.h>
class DbTest : public ::testing::Test {
protected:
static void SetUpTestSuite() { /* open shared connection */ }
static void TearDownTestSuite() { /* close it */ }
};Per test e per suite
Scelga con attenzione.
SetUp/TearDown: per test, isolati e sicuriSetUpTestSuite/TearDownTestSuite: per suite, condivisi e più veloci, ma i test possono interferire tra loro
Metodi helper
Le fixture possono contenere metodi helper utilizzati da più test, mantenendo ogni test concentrato sulle proprie asserzioni.
#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);
}Ambiente globale
Per la configurazione a livello di processo, da eseguire una volta prima di qualsiasi test, registri un ::testing::Environment tramite AddGlobalTestEnvironment. È utile per il logging o l'inizializzazione del framework.
Mantenere indipendenti i test
Poiché ogni TEST_F riceve una fixture nuova, non faccia mai affidamento sugli effetti collaterali di un altro test. L'indipendenza facilita la diagnosi dei fallimenti e rende i test sicuri da eseguire in parallelo.
Verifica rapida
Richiami il ciclo di vita della fixture.
Riepilogo
Ha imparato a usare le fixture.
- Derivi da
::testing::Teste utilizziTEST_F SetUp/TearDownvengono eseguiti per ogni test; ogni volta viene creato un oggetto nuovo- Utilizzi
SetUpTestSuiteper le risorse condivise, inizializzate una volta per suite - Gli helper e gli ambienti globali aiutano a gestire suite più grandi
Domande Frequenti
La lezione «Fixture e configurazione» è gratuita?
Sì — il testo completo di «Fixture e configurazione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Fixture e configurazione»?
Condividere la configurazione dei test Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Fixture e configurazione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurare GTest
- Asserzioni e matcher
- Fixture e configurazione
- Mocking con GMock