0Pricing
C++ Academy · Lezione

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 sicuri
  • SetUpTestSuite/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::Test e utilizzi TEST_F
  • SetUp/TearDown vengono eseguiti per ogni test; ogni volta viene creato un oggetto nuovo
  • Utilizzi SetUpTestSuite per 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

  1. Configurare GTest
  2. Asserzioni e matcher
  3. Fixture e configurazione
  4. Mocking con GMock
← Torna a C++ Academy