天天看點

Visual Studio(VS)C++單元測試

部落格位址已更改,文章數量較多不便批量修改,若想通路源文請到 coologic部落格 查閱,網址:www.coologic.cn

如本文記錄位址為 techieliang.com/A/B/C/ 請改為 www.coologic.cn/A/B/C/ 即可查閱

版權聲明:若無來源注明,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. 代碼覆寫率測試

建立了一個“Win32控制台應用程式”,在其内建立了“my_math.h”檔案,為了友善沒有建立類和.cpp檔案,用一個簡單的函數做範例。

  1. //my_math.h
  2. #pragma once
  3. int add(int a, int b) {
  4. return a + b;
  5. }

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隻給出了程式的相對位址,而可執行檔案是絕對位址。

  1. #include "stdafx.h"
  2. #include "CppUnitTest.h"
  3. #include "../MyProgram/my_math.h" //添加原始項目的頭檔案,建議相對路徑
  4. using namespace Microsoft::VisualStudio::CppUnitTestFramework;
  5. namespace MyProgramTest {//MyProgram項目單元測試
  6. TEST_CLASS(UnitTest1) {//測試類
  7. public:
  8. TEST_METHOD(TestMethod1) {//測試函數
  9. // TODO: 在此輸入測試代碼
  10. Assert::AreEqual(15, add(5, 10));
  11. };

自己包含原始項目被測函數頭檔案”#include “../MyProgram/my_math.h” //添加原始項目的頭檔案,建議相對路徑”

UnitTest1為測試類名,TEST_CLASS為VS提供的測試類宏定義

  1. #define TEST_CLASS(className) \
  2. 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等多個方法以供測試中進行斷言

  1. Assert.Inconclusive()//表示一個未驗證的測試;
  2. Assert.AreEqual() //測試指定的值是否相等,如果相等,則測試通過;
  3. AreSame() //用于驗證指定的兩個對象變量是指向相同的對象,否則認為是錯誤
  4. AreNotSame() //用于驗證指定的兩個對象變量是指向不同的對象,否則認為是錯誤
  5. Assert.IsTrue() //測試指定的條件是否為True,如果為True,則測試通過;
  6. Assert.IsFalse() //測試指定的條件是否為False,如果為False,則測試通過;
  7. Assert.IsNull() //測試指定的對象是否為空引用,如果為空,則測試通過;
  8. Assert.IsNotNull() //測試指定的對象是否為非空,如果不為空,則測試通過;

若需要多個測試函數,隻需要在public:下建立多個TEST_METHOD即可

若需要多個測試類,可以建立一些cpp檔案,注意包含vs單元測試檔案CppUnitTest.h

單元測試運作,不需要提前先編譯原始程式,運作測試時會自動編譯。

在菜單欄-測試-運作選擇運作所有測試即可

選擇此項後會先編譯目标項目,然後執行所有測試類中的public中的測試函數(有不需要測試的可以臨時改為private)。

測試結果會在測試資料總管顯示

若此視窗不自動彈出,可在菜單欄-測試-視窗打開

4.1. 并行測試

“測試資料總管”搜尋框左側的三個雙向箭頭按鈕,點選他會進入選中狀态,即開啟了并行測試功能。

4.2. 代碼覆寫率測試

對于VS2015 Enterprise版本在測試菜單下“分析代碼覆寫率”可以利用目前單元測試分析對原始項目的代碼覆寫率。

VS2015 Community版本沒有分析代碼覆寫率功能