Condividi tramite


Usare Boost.Test per C++ in Visual Studio

In Visual Studio 2017 e versioni successive l'adattatore di test Boost.Test è integrato nell'IDE di Visual Studio. Si tratta di un componente del carico di lavoro Sviluppo di applicazioni desktop con C++ .

Adattatore di test per Boost.Test

Se il carico di lavoro Sviluppo di applicazioni desktop con C++ non è installato, aprire il programma di installazione di Visual Studio. Selezionare il carico di lavoro Sviluppo di applicazioni desktop con C++, quindi scegliere il pulsante Modifica.

Installare Boost

Per usare Boost.Test è necessario installare Boost. Se Boost non è installato, è consigliabile usare la gestione pacchetti Vcpkg.

  1. Seguire le istruzioni in vcpkg: gestione pacchetti per C++ per Windows per installare vcpkg, se non è già stato installato.

  2. Installare la libreria statica o dinamica Boost.Test:

    • Eseguire vcpkg install boost-test per installare la libreria dinamica Boost.Test.

      oppure

    • Eseguire vcpkg install boost-test:x86-windows-static per installare la libreria statica Boost.Test.

  3. Eseguire vcpkg integrate install per configurare Visual Studio con la libreria e includere i percorsi delle intestazioni e dei file binari di Boost.

È possibile scegliere come configurare i test all'interno della soluzione in Visual Studio: è possibile includere il codice di test nel progetto sottoposto a test oppure creare un progetto di test separato per i test. Entrambe le scelte presentano vantaggi e svantaggi.

Aggiungere test all'interno del progetto

In Visual Studio 2017 versione 15.6 e successive è possibile aggiungere un modello di elemento per i test nel progetto. Sia i test che il codice si trovano nello stesso progetto. Sarà necessario creare una configurazione di compilazione separata per generare una compilazione di test. Inoltre, è necessario mantenere i test fuori dalle build di debug e versione.

In Visual Studio 2017 versione 15.5 non sono disponibili progetti di test preconfigurati o modelli di elementi per Boost.Test. Usare le istruzioni per creare e configurare un progetto di test separato.

Creare un elemento Boost.Test

  1. Per creare un file di .cpp per i test, fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e scegliere Aggiungi>nuovo elemento.

  2. Nella finestra di dialogo Aggiungi nuovo elemento espandere Installato>Visual C++>Test. Selezionare Boost.Test, quindi scegliere Aggiungi per aggiungere Test.cpp al progetto.

    Modello di elemento Boost.Test

Il nuovo file di Test.cpp contiene un metodo di test di esempio. Questo file consente di includere file di intestazione personalizzati e di scrivere test per l'app.

Il file di test usa anche macro per definire una nuova main routine per le configurazioni di test. Se si compila ora il progetto, verrà visualizzato un errore di LNK2005, ad esempio "_main già definito in main.obj".

Creare e aggiornare le configurazioni di compilazione

  1. Per creare una configurazione di test, nella barra dei menu selezionare Compila>Configuration Manager. Nella finestra di dialogo Configuration Manager aprire l'elenco a discesa in Configurazione soluzione attiva e scegliere Nuovo. Nella finestra di dialogo Nuova configurazione soluzione immettere un nome, ad esempio "Debug UnitTests". In Copia impostazioni selezionare Debug e quindi scegliere OK.

  2. Escludere il codice di test dalle configurazioni debug e rilascio: in Esplora soluzioni fare clic con il pulsante destro del mouse su Test.cpp e scegliere Proprietà. Nella finestra di dialogo Pagine delle proprietà selezionare Tutte le configurazioni nell'elenco a discesa Configurazione. Selezionare Proprietà>di configurazione Generale e aprire l'elenco a discesa per la proprietà Esclusi da compilazione. Selezionare , quindi scegliere Applica per salvare le modifiche.

  3. Per includere il codice di test nella configurazione unittest di debug, nella finestra di dialogo Pagine delle proprietà selezionare Debug unittest nell'elenco a discesa Configurazione . Selezionare No nella proprietà Esclusa da compilazione , quindi scegliere OK per salvare le modifiche.

  4. Escludere il codice principale dalla configurazione di UnitTest di debug. In Esplora soluzioni fare clic con il pulsante destro del mouse sul file contenente la main funzione e scegliere Proprietà. Nella finestra di dialogo Pagine delle proprietà selezionare Debug UnitTests nell'elenco a discesa Configurazione. Selezionare Proprietà>di configurazione Generale e aprire l'elenco a discesa per la proprietà Esclusi da compilazione. Selezionare , quindi scegliere OK per salvare le modifiche.

  5. Impostare Configurazione soluzione su Debug UnitTests, quindi compilare il progetto per abilitare Esplora test per individuare il metodo.

Se il nome di configurazione creato inizia con le parole "Debug" o "Release", le librerie Boost.Test corrispondenti vengono prelevate automaticamente.

Il modello di elemento usa la variante con singola intestazione di Boost.Test, ma è possibile modificare il percorso #include per usare la variante con libreria autonoma. Per altre informazioni vedere Aggiungere direttive include.

Creare un progetto di test separato

In molti casi, è più facile usare un progetto separato per i test. Non sarà necessario creare una configurazione di test speciale per il progetto. In alternativa, escludere i file di test dalle build di debug e rilascio.

Per creare un progetto di test separato

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo della soluzione e scegliere Aggiungi>Nuovo progetto.

  2. Nella finestra di dialogo Aggiungi un nuovo progetto scegliere C++, Windows e Console nell'elenco a discesa dei filtri. Selezionare il modello App console e quindi scegliere Avanti.

  3. Specificare un nome per il progetto e scegliere Crea.

  4. Eliminare la funzione main nel file CPP.

  5. Se si usa la versione a intestazione singola o a libreria dinamica di Boost.Test, passare a Aggiungi direttive di inclusione. Se si usa la versione della libreria statica, è necessario eseguire alcune configurazioni aggiuntive:

    a. Per modificare il file di progetto, per prima cosa scaricarlo. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto e scegliere Scarica progetto. Fare quindi clic con il pulsante destro del mouse sul nodo del progetto e scegliere Modifica <nome>.vcxproj.

    b. Aggiungere due righe al gruppo di proprietà Variabili globali come illustrato di seguito:

    <PropertyGroup Label="Globals">
    ....
        <VcpkgTriplet>x86-windows-static</VcpkgTriplet>
        <VcpkgEnabled>true</VcpkgEnabled>
    </PropertyGroup>
    

    c. Salvare e chiudere il file *.vcxproj e quindi ricaricare il progetto.

    d. Per aprire le pagine delle proprietà, fare clic con il pulsante destro del mouse sul nodo del progetto e scegliere Proprietà.

    e. Espandere C/C++>Generazione di codice, quindi selezionare Libreria di Runtime. Selezionare /MTd per la libreria di runtime statica di debug o /MT per la libreria di runtime statica di versione.

    f. Espandere Linker>System. Verificare che SubSystem sia impostato su Console.

    g. Scegliere OK per chiudere le pagine delle proprietà.

Aggiungere direttive include

  1. Nel file CPP del test aggiungere le direttive #include necessarie per rendere visibili al codice di test i tipi e le funzioni del programma. Se si usa un progetto di test separato, in genere il programma si trova a un livello di pari livello nella gerarchia di cartelle. Se si digita #include "../", viene visualizzata una finestra di IntelliSense che consente di selezionare il percorso completo del file di intestazione.

    Aggiungere direttive #include

    È possibile usare la libreria autonoma con:

    #include <boost/test/unit_test.hpp>
    

    In alternativa, usare la versione a una sola intestazione con:

    #include <boost/test/included/unit_test.hpp>
    

    Quindi, definire BOOST_TEST_MODULE.

L'esempio seguente è sufficiente per rendere individuabile il test in Esplora test:

#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp> //single-header
#include "../MyProgram/MyClass.h" // project being tested
#include <string>

BOOST_AUTO_TEST_CASE(my_boost_test)
{
    std::string expected_value = "Bill";

    // assume MyClass is defined in MyClass.h
    // and get_value() has public accessibility
    MyClass mc;
    BOOST_CHECK(expected_value == mc.get_value());
}

Scrivere ed eseguire i test

È ora possibile scrivere ed eseguire i Boost Test. Per informazioni sulle macro dei test, vedere la documentazione della libreria Boost Test. Per informazioni sull'individuazione, l'esecuzione e il raggruppamento dei test usando Esplora test, vedere Eseguire unit test con Esplora test.