標籤:using soft 尾碼 community har 單元 data- 不用 部落格
著作權聲明:若無來源註明,Techie亮部落格文章均為原創。 轉載請以連結形式標明本文標題和地址:
本文標題:Visual Studio(VS)C++單元測試 本文地址:http://techieliang.com/2017/12/516/
文章目錄
- 1. 建立一個待測項目MyProgram
- 1.1. 建立一個測試專案MyProgramTest
- 1.2. 必要的配置
- 2. XXXtext.cpp測試檔案說明
- 3. 運行單元測試
- 4. 其他
- 4.1. 並行測試
- 4.2. 程式碼涵蓋範圍測試
1. 建立一個待測項目MyProgram
建立了一個“Win32控制台應用程式”,在其內建立了“my_math.h”檔案,為了方便沒有建立類和.cpp檔案,用一個簡單的函數做範例。
- //my_math.h
- #pragma once
- int add(int a, int b) {
- return a + b;
- }
1.1. 建立一個測試專案MyProgramTest
此處要選擇Visual C++->測試->本機單元測試項目,填寫好名稱,點擊確定即可,不需要其他配置就會在當前解決方案下建立出項目。
注意建立的時候直接右鍵選擇當前解決方案-添加-建立項目,這樣預設為當前解決方案
系統預設產生了四個檔案“stdafx.h”、“stdafx.cpp”(Standard Application Framework Extensions)先行編譯標頭檔,“targetver.h”運行環境定義標頭檔,“unittest1.cpp”測試檔案。前三個不用管,直接看第四個測試檔案即可。
1.2. 必要的配置
建立完成MyProgramTest項目以後,在屬性-連接器-輸入-附加依賴項中添加“..\MyProgram\Debug\*.obj”
建議使用相對路徑,使用*表明所有.obj尾碼檔案。注意只需要登錄區測試專案,不需要對原項目做任何修改。
obj檔案(Microsoft推出的程式編譯中間代碼檔案),程式編譯時間產生的中間代碼檔案。目標檔案,一般是程式編譯後的二進位檔案,再通過連結器和資源檔連結就成可執行檔了。OBJ只給出了程式的相對位址,而可執行檔是絕對位址。
2. XXXtext.cpp測試檔案說明
- #include "stdafx.h"
- #include "CppUnitTest.h"
- #include "../MyProgram/my_math.h" //添加原始項目的標頭檔,建議相對路徑
- using namespace Microsoft::VisualStudio::CppUnitTestFramework;
- namespace MyProgramTest {//MyProgram項目單元測試
- TEST_CLASS(UnitTest1) {//測試類別
- public:
- TEST_METHOD(TestMethod1) {//測試函數
- // TODO: 在此輸入測試代碼
- Assert::AreEqual(15, add(5, 10));
- }
- };
- }
自己包含原始項目被測函數標頭檔”#include “../MyProgram/my_math.h” //添加原始項目的標頭檔,建議相對路徑”
UnitTest1為測試類別名,TEST_CLASS為VS提供的測試類別宏定義
- #define TEST_CLASS(className) \
- ONLY_USED_AT_NAMESPACE_SCOPE class className : public ::Microsoft::VisualStudio::CppUnitTestFramework::TestClass<className>
TestMethod1為測試函數名,TEST_METHOD為VS提供的測試函數宏定義
Assert為斷言類,其提供了AreEqual、AreSame、AreNotEqual、AreNotSame、IsNull、IsNotNull、IsTrue、IsFalse等多個方法以供測試中進行斷言
- Assert.Inconclusive()//表示一個未驗證的測試;
- Assert.AreEqual() //測試指定的值是否相等,如果相等,則測試通過;
- AreSame() //用於驗證指定的兩個物件變數是指向相同的對象,否則認為是錯誤
- AreNotSame() //用於驗證指定的兩個物件變數是指向不同的對象,否則認為是錯誤
- Assert.IsTrue() //測試指定的條件是否為True,如果為True,則測試通過;
- Assert.IsFalse() //測試指定的條件是否為False,如果為False,則測試通過;
- Assert.IsNull() //測試指定的對象是否為空白引用,如果為空白,則測試通過;
- Assert.IsNotNull() //測試指定的對象是否為非空,如果不為空白,則測試通過;
若需要多個測試函數,只需要在public:下建立多個TEST_METHOD即可
若需要多個測試類別,可以建立一些cpp檔案,注意包含vs單元測試檔案CppUnitTest.h
3. 運行單元測試
單元測試運行,不需要提前先編譯原始程式,運行測試時會自動編譯。
在功能表列-測試-運行選擇運行所有測試即可
選擇此項後會先編譯目標項目,然後執行所有測試類別中的public中的測試函數(有不需要測試的可以臨時改為private)。
測試結果會在測試資源管理員顯示
若此視窗不自動彈出,可在功能表列-測試-視窗開啟
4. 其他4.1. 並行測試
“測試資源管理員”搜尋方塊左側的三個雙向箭頭按鈕,點擊他會進入選中狀態,即開啟了並行測試功能。
4.2. 程式碼涵蓋範圍測試
對於VS2015 Enterprise版本在測試菜單下“分析程式碼涵蓋範圍”可以利用當前單元測試分析對原始項目的程式碼涵蓋範圍。
VS2015 Community版本沒有分析程式碼涵蓋範圍功能
Visual Studio(VS)C++單元測試