Używanie narzędzia Boost.Test dla języka C++ w programie Visual Studio

W programie Visual Studio 2017 lub nowszym karta testowa Boost.Test jest zintegrowana ze środowiskiem IDE programu Visual Studio. Jest to składnik tworzenia aplikacji klasycznych z obciążeniem języka C++ .

Test Adapter for Boost.Test

Jeśli nie masz zainstalowanego obciążenia Programowanie aplikacji klasycznych w języku C++, otwórz Instalator programu Visual Studio. Wybierz pakiet roboczy Programowanie aplikacji klasycznych w języku C++, a następnie wybierz przycisk Modyfikuj.

Zainstalować rozwiązanie Boost

Boost.Test wymaga boost! Jeśli nie masz zainstalowanego narzędzia Boost, zalecamy użycie menedżera pakietów Vcpkg.

  1. Postępuj zgodnie z instrukcjami w witrynie Vcpkg: menedżer pakietów C++ dla systemu Windows , aby zainstalować narzędzie vcpkg (jeśli jeszcze go nie masz).

  2. Zainstaluj bibliotekę dynamiczną lub statyczną Boost.Test:

    • Uruchom polecenie vcpkg install boost-test , aby zainstalować bibliotekę dynamiczną Boost.Test.

      — LUB —

    • Uruchom polecenie vcpkg install boost-test:x86-windows-static , aby zainstalować bibliotekę statyczną Boost.Test.

  3. Uruchom polecenie vcpkg integrate install , aby skonfigurować program Visual Studio z biblioteką i dołączyć ścieżki do nagłówków i plików binarnych Boost.

Możesz wybrać sposób konfigurowania testów w ramach rozwiązania w programie Visual Studio: możesz dołączyć kod testowy do projektu testowego lub utworzyć oddzielny projekt testowy dla testów. Obie opcje mają zalety i wady.

Dodawanie testów wewnątrz projektu

W programie Visual Studio 2017 w wersji 15.6 lub nowszej można dodać szablon elementu do testów do projektu. Testy i kod działają w tym samym projekcie. Aby wygenerować kompilację testową, musisz utworzyć oddzielną konfigurację kompilacji. Ponadto należy zachować testy poza kompilacjami debugowania i wydania.

W programie Visual Studio 2017 w wersji 15.5 nie są dostępne żadne wstępnie skonfigurowane szablony projektów testowych ani elementów dla aplikacji Boost.Test. Skorzystaj z instrukcji, aby utworzyć i skonfigurować oddzielny projekt testowy.

Tworzenie elementu Boost.Test

  1. Aby utworzyć plik cpp dla testów, kliknij prawym przyciskiem myszy węzeł projektu w Eksplorator rozwiązań i wybierz polecenie Dodaj>nowy element.

  2. W oknie dialogowym Dodawanie nowego elementu rozwiń węzeł Zainstalowany>test Visual C++.> Wybierz pozycję Boost.Test, a następnie wybierz pozycję Dodaj , aby dodać plik Test.cpp do projektu.

    Boost.Test Item Template

Nowy plik Test.cpp zawiera przykładową metodę testową. Ten plik służy do dołączania własnych plików nagłówków i pisania testów dla aplikacji.

Plik testowy używa również makr do definiowania nowej main procedury konfiguracji testów. Jeśli skompilujesz teraz projekt, zostanie wyświetlony błąd LNK2005, taki jak "_main już zdefiniowany w pliku main.obj".

Tworzenie i aktualizowanie konfiguracji kompilacji

  1. Aby utworzyć konfigurację testową, na pasku menu wybierz pozycję Kompiluj>program Configuration Manager. W oknie dialogowym Configuration Manager otwórz listę rozwijaną w obszarze Konfiguracja aktywnego rozwiązania i wybierz pozycję Nowy. W oknie dialogowym Nowa konfiguracja rozwiązania wprowadź nazwę, na przykład "Debug UnitTests". W obszarze Kopiuj ustawienia wybierz pozycję Debuguj, a następnie wybierz przycisk OK.

  2. Wyklucz kod testowy z konfiguracji debugowania i wydania: w Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję Test.cpp i wybierz pozycję Właściwości. W oknie dialogowym Strony właściwości wybierz pozycję Wszystkie konfiguracje na liście rozwijanej Konfiguracja. Wybierz pozycję Właściwości>konfiguracji Ogólne i otwórz listę rozwijaną właściwości Wykluczone z kompilacji. Wybierz pozycję Tak, a następnie wybierz pozycję Zastosuj , aby zapisać zmiany.

  3. Aby uwzględnić kod testowy w konfiguracji debugowania UnitTests, w oknie dialogowym Strony właściwości wybierz pozycję Debuguj testy jednostkowe na liście rozwijanej Konfiguracja . Wybierz pozycję Nie we właściwości Wykluczone z kompilacji , a następnie wybierz przycisk OK , aby zapisać zmiany.

  4. Wyklucz kod główny z konfiguracji Debug UnitTests. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy plik zawierający main funkcję i wybierz polecenie Właściwości. W oknie dialogowym Strony właściwości wybierz pozycję Debuguj unitTesty na liście rozwijanej Konfiguracja. Wybierz pozycję Właściwości>konfiguracji Ogólne i otwórz listę rozwijaną właściwości Wykluczone z kompilacji. Wybierz pozycję Tak, a następnie wybierz przycisk OK , aby zapisać zmiany.

  5. Ustaw pozycję Konfiguracja rozwiązania na Debugowanie testów UnitTests, a następnie skompiluj projekt, aby umożliwić Eksploratorowi testów odnajdywanie metody.

O ile tworzona nazwa konfiguracji zaczyna się od słów "Debugowanie" lub "Wydanie", odpowiednie biblioteki Boost.Test są pobierane automatycznie.

Szablon elementu używa wariantu pojedynczego nagłówka Boost.Test, ale można zmodyfikować ścieżkę #include, aby użyć wariantu biblioteki autonomicznej. Aby uzyskać więcej informacji, zobacz Dodawanie dyrektyw dołączania.

Tworzenie oddzielnego projektu testowego

W wielu przypadkach łatwiej jest użyć oddzielnego projektu dla testów. Nie trzeba tworzyć specjalnej konfiguracji testowej dla projektu. Możesz też wykluczyć pliki testowe z kompilacji debugowania i wydania.

Aby utworzyć oddzielny projekt testowy

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł rozwiązania i wybierz polecenie Dodaj>nowy projekt.

  2. W oknie dialogowym Dodawanie nowego projektu wybierz pozycję C++, Windows i Konsola na liście rozwijanej filtru. Wybierz szablon Aplikacja konsolowa, a następnie wybierz pozycję Dalej.

  3. Nadaj projektowi nazwę i wybierz pozycję Utwórz.

  4. main Usuń funkcję w pliku cpp.

  5. Jeśli używasz pojedynczego nagłówka lub dynamicznej wersji biblioteki Boost.Test, przejdź do pozycji Dodaj dyrektywy dołączania. Jeśli używasz wersji biblioteki statycznej, musisz wykonać dodatkową konfigurację:

    a. Aby edytować plik projektu, najpierw go zwolnij. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł projektu i wybierz polecenie Zwolnij projekt. Następnie kliknij prawym przyciskiem myszy węzeł projektu i wybierz polecenie Edytuj nazwę.vcxproj>.<

    b. Dodaj dwa wiersze do grupy właściwości Globals , jak pokazano poniżej:

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

    c. Zapisz i zamknij plik *.vcxproj , a następnie załaduj ponownie projekt.

    d. Aby otworzyć strony właściwości, kliknij prawym przyciskiem myszy węzeł projektu i wybierz polecenie Właściwości.

    e. Rozwiń węzeł Generowanie kodu C/C++>, a następnie wybierz pozycję Biblioteka środowiska uruchomieniowego. Wybierz /MTd , aby debugować statyczną bibliotekę środowiska uruchomieniowego lub /MT , aby uzyskać statyczną bibliotekę środowiska uruchomieniowego wydania.

    f. Rozwiń węzeł System konsolidatora.> Sprawdź, czy podsystem jest ustawiony na konsolę.

    g. Wybierz przycisk OK , aby zamknąć strony właściwości.

Dodawanie dyrektyw include

  1. W pliku cpp testowym dodaj wszelkie potrzebne #include dyrektywy, aby typy i funkcje programu działały jako widoczne dla kodu testowego. Jeśli używasz oddzielnego projektu testowego, zazwyczaj program znajduje się na poziomie równorzędnym w hierarchii folderów. Jeśli wpiszesz #include "../"polecenie , zostanie wyświetlone okno funkcji IntelliSense i umożliwi wybranie pełnej ścieżki do pliku nagłówka.

    Add #include directives

    Możesz użyć autonomicznej biblioteki z:

    #include <boost/test/unit_test.hpp>
    

    Możesz też użyć wersji z jednym nagłówkiem z:

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

    Następnie zdefiniuj wartość BOOST_TEST_MODULE.

Poniższy przykład jest wystarczający, aby test był wykrywalny w Eksploratorze testów:

#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());
}

Pisanie i uruchamianie testów

Teraz możesz przystąpić do pisania i uruchamiania testów Boost. Aby uzyskać informacje na temat makr testowych, zobacz dokumentację biblioteki testowej Boost. Zobacz Uruchamianie testów jednostkowych za pomocą Eksploratora testów, aby uzyskać informacje na temat odnajdywania, uruchamiania i grupowania testów przy użyciu Eksploratora testów.