在Visual Studio中使用Google Test 測試c++代碼


在Visual Studio 2017和更高版本中,Google Test已作為C ++桌面開發工作負載的默認組件集成到Visual Studio IDE中。要驗證它是否已安裝在您的計算機上,請打開Visual Studio安裝程序,並在工作負載組件列表下找到Google Test:這里我使用的vs2019,win10系統。

 

 

在Visual Studio 2019中添加Google測試項目

  • 在解決方案資源管理器中,右鍵單擊解決方案節點,然后選擇“添加”>“新建項目”。
  • 將語言設置為C ++,然后在搜索框中鍵入test。 從結果列表中,選擇Google Test Project。
  • 為測試項目命名,然后單擊“確定”。
  •  

     

     

     

    配置測試項目

    在出現的“測試項目配置”對話框中,您可以選擇要測試的項目。當您選擇一個項目時,Visual Studio會將引用添加到所選項目。如果不選擇任何項目,則需要手動添加對要測試的項目的引用。在靜態和動態鏈接到Google Test二進制文件之間進行選擇時,注意事項與任何C ++程序相同。

  •  

    這里我選擇了自己的項目First Project。 

  • 設置其他選項

    在主菜單中,選擇工具>選項> Google Test的測試適配器以設置其他選項。

  •  

     

    添加包含指令

    在您的測試.cpp文件中,添加所有需要的#include指令,以使程序的類型和功能對測試代碼可見。通常,該程序在文件夾層次結構中為上一層。如果鍵入#include“ ../”,將出現IntelliSense窗口,使您可以選擇頭文件的完整路徑。

  •  

     為了避免在源文件的每個include語句中鍵入完整路徑,可以在Project > Properties > C / C ++ > General > Additional Include Directories中添加所需的文件夾,如下圖所示。

     

     

     

    這樣,就可以編寫和運行Google測試了。

  • 使用gtest進行測試
  • 首先看一下gtest項目的結構:在新建gtest項目時,自動生成了pch.h和pch.cpp兩個文件,如下圖所示。這里對First Project項目下的a.h和a.cpp下的函數進行測試。
  •  

    a.h中的函數為:判斷兩個字符串是不是兄弟字符串,即兩個字符串只有順序不一樣,其他完全一樣。

  • class brother {
    public:
        bool isBrotherStrs(string s1, string s2)
        {
            if (s1.size() != s2.size())
                return false;
            unordered_map<char, int> map;
            for (int i = 0; i < s1.size(); i++)
            {
                map[s1[i]]++;
            }
            for (int j = 0; j < s2.size(); j++)
            {
                if (map.find(s2[j]) == map.end())
                    return false;
                else
                    map[s2[j]]--;
            }
            for (int i = 0; i < s1.size(); i++)
            {
                if (map[s1[i]] != 0)
                    return false;
            }
            return true;
    
        }
    };

     

     測試代碼如下:這里僅是測試其中的一種情況,並非全部測試用例。

  • #include <iostream>
    #include <string>
    #include "pch.h"
    //#include "../First Project/**.h"
    #include "../First Project/a.h"
    
    using namespace std;
    
    TEST(isBrotherStrs, case1) {
        brother a;
        bool res = a.isBrotherStrs("abc", "cba");
        EXPECT_EQ(1, a.isBrotherStrs("abc", "cba"));
        EXPECT_TRUE(res);
    }
    
    //:: testing :: InitGoogleTest()函數解析Google測試標志的命令行,
    //並刪除所有已識別的標志。 這允許用戶通過各種標志控制測試程序的行為.
    // 在調用RUN_ALL_TESTS()之前必須調用此函數,否則標志將無法正確初始化。
    int main(int argc, char** argv) {
        ::testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }

    然后將getst的測試項目(Sample-Test1)設置為啟動項目運行結果如下:

  •  

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM