在 Visual Studio 中使用 C++ 的 Boost.Test

在 Visual Studio 2017 和更新版本中,Boost.Test 測試配接器已整合至 Visual Studio IDE。 這是使用 C++ 的桌面開發工作負載的元件。

Test Adapter for Boost.Test

若您尚未安裝 [使用 C++ 進行桌面開發] 工作負載,請開啟 Visual Studio 安裝程式。 選取 [使用 C++ 的桌面開發] 工作負載,然後選擇 [修改] 按鈕。

安裝 Boost

Boost.Test 需要 Boost! 如果您未安裝 Boost,建議您使用 vcpkg 套件管理員。

  1. 請遵循 Vcpkg:適用於 Windows 的 C++ 套件管理員中的指示安裝 vcpkg (如果目前沒有)。

  2. 安裝 Boost.Test 動態或靜態程式庫:

    • 執行 vcpkg install boost-test 以安裝 Boost.Test 動態程式庫。

      -或-

    • 執行 vcpkg install boost-test:x86-windows-static 以安裝 Boost.Test 靜態程式庫。

  3. 執行 vcpkg integrate install 設定 Visual Studio 和程式庫,並包含 Boost 標頭和二進位檔的路徑。

您可以選擇如何在 Visual Studio 中設定方案內的測試:您可以在測試的專案中包含測試程式碼,也可以為測試建立個別的測試專案。 每個選擇都有優缺點。

在專案中新增測試

在 Visual Studio 2017 15.6 版和更新版本中,您可以將項目範本新增至專案中進行測試。 測試與程式碼都存在於相同的專案中。 您必須建立個別的組建組態,才能產生測試組建。 而且,您必須讓偵錯和發行組建不進行測試。

在 Visual Studio 2017 15.5 版中,沒有預先設定的測試專案或項目範本可供 Boost.Test 使用。 使用指示來建立及設定個別的測試專案。

建立 Boost.Test 項目

  1. 若要為您的測試建立 .cpp 檔案,請在 [方案總管] 中的專案節點上按一下滑鼠右鍵,並選擇 [新增] > [新增項目]>

  2. 在 [新增項目] 對話方塊中,展開 [已安裝] > [Visual C++] > [測試]>>。 選取 [Boost.Test],然後選擇 [新增] 以將 Test.cpp 新增至您的專案。

    Boost.Test Item Template

新的 Test.cpp 檔案包含樣本測試方法。 您可以在此檔案中包含您自己的標頭檔,並未您的應用程式撰寫測試。

測試檔案也會使用巨集來定義測試組態的新 main 常式。 如果您現在建置專案,您會看到 LNK2005 錯誤,例如「已在 main.obj 中定義_main。」

建立及更新組建組態

  1. 若要建立測試組態,請在功能表列上,選取 [建置] > [組態管理員]>。 在 [組態管理員] 對話方塊中,開啟 [作用中解決方案組態] 下的下拉式清單,然後選擇 [新增]。 在 [新增解決方案組態] 對話方塊中,輸入名稱,例如 "Debug UnitTests"。 在 [複製設定來源] 下,選取 [偵錯],然後選擇 [確定]

  2. 從偵錯和發行組態中排除測試程式碼:在 [方案總管] 中,以滑鼠右鍵按一下 Test.cpp,並選取 [屬性]。 在 [屬性頁面] 對話方塊中,在 [設定] 下拉式清單中,選取 [所有設定]。 選取 [設定屬性] > [一般]>,並開啟 [從組建排除] 屬性的下拉式清單。 選取 [是],然後選擇 [套用],以儲存您的變更。

  3. 若要在 Debug UnitTests 設定中包含測試程式碼,請在 [屬性頁面] 對話方塊中,在 [設定] 下拉式清單中,選取 Debug UnitTests。 在 [從組建排除] 屬性中,選取 [否],然後選擇 [確定],以儲存您的變更。

  4. 從 Debug UnitTests 設定中排除主要程式碼。 在 [方案總管] 中,以滑鼠右鍵按一下包含 main 函式的檔案,並選取 [屬性]。 在 [屬性頁面] 對話方塊中,在 [設定] 下拉式清單中,選取 [Debug UnitTests]。 選取 [設定屬性] > [一般]>,並開啟 [從組建排除] 屬性的下拉式清單。 選取 [是],然後選擇 [確定],以儲存您的變更。

  5. 將 [解決方案設定] 設定為 Debug UnitTests,然後建置您的專案,以便啟用 [測試總管] 以探索方法。

只要您建立的設定名稱開頭為 "Debug" 或 "Release",就會自動挑選對應的 Boost.Test 程式庫。

項目範本會使用 Boost.Test 的單一標頭變體,但是您可以修改 #include 路徑以使用獨立程式庫變體。 如需詳細資訊,請參閱新增 include 指示詞

建立個別的測試專案

在許多情況下,針對您的測試使用個別專案會比較容易。 您不需要為專案建立特殊的測試組態。 或者,從偵錯和發行組建中排除測試檔案。

建立個別的測試專案

  1. 在 [方案總管] 中,以滑鼠右鍵按一下方案節點,然後選擇 [新增]>[新增專案]

  2. 在 [新增專案] 對話方塊中,在篩選條件下拉式清單中,選擇 [C++]、[Windows] 和 [主控台]。 選取 [主控台應用程式] 範本,然後選擇 [下一步]

  3. 提供專案名稱,然後選擇 [建立]

  4. 刪除 .cpp 檔案中的 main 函式。

  5. 如果您是使用 Boost.Test 的單一標頭或動態程式庫版本,請移至新增 include 指示詞。 如果您是使用靜態程式庫版本,則必須執行一些額外的設定:

    a. 若要編輯專案檔,請先卸載它。 在方案總管中,以滑鼠右鍵按一下專案節點,然後選擇 [卸載專案]。 然後,以滑鼠右鍵按一下專案節點,選擇 [編輯] > [名稱] > [.vcxproj]<>

    b. 在 Globals 屬性群組中新增兩行,如下所示:

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

    c. 儲存並關閉 *.vcxproj 檔案,然後重新載入專案。

    d. 若要開啟 [屬性頁],請以滑鼠右鍵按一下專案節點,選擇 [屬性]

    e. 展開 [C/C++]>[程式碼產生],然後選取 [執行階段程式庫]。 為偵錯靜態執行階段程式庫選取 /MTd,或為版本靜態執行階段程式庫選取 /MT

    f. 展開 [連結器]>[系統]。 確認 [子系統] 設為 [主控台]

    .g 選擇 [確定] 關閉屬性頁。

新增 include 指示詞

  1. 在測試的 .cpp 檔中,新增任何需要的 #include 指示詞,以便測試程式碼可以看到程式的類型和函式。 如果您使用個別的測試專案,通常程式會位於資料夾階層中的同層級層級。 如果鍵入 #include "../",即會出現 IntelliSense 視窗,讓您選取標頭檔的完整路徑。

    Add #include directives

    您可以使用獨立程式庫搭配:

    #include <boost/test/unit_test.hpp>
    

    或者,使用單一標頭版本搭配:

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

    然後定義 BOOST_TEST_MODULE

要讓測試可在測試總管中被探索到,下列範例便已足夠:

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

撰寫及執行測試

您現在準備好撰寫及執行 Boost Test。 如需測試巨集的資訊,請參閱 Boost Test Library 文件。 如需使用測試總管探索、執行及分組測試的資訊,請參閱使用測試總管執行單元測試