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

版權聲明:若無來源註明, Techie亮博客文章均爲原創。 轉載請以連接形式標明本文標題和地址:
本文標題:Visual Studio(VS)C++單元測試     本文地址: http://techieliang.com/2017/12/516/

1. 新建一個待測項目MyProgram

新建了一個「Win32控制檯應用程序」,在其內新建了「my_math.h」文件,爲了方便沒有創建類和.cpp文件,用一個簡單的函數作範例。app

  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」spa

建議使用相對路徑,使用*代表全部.obj後綴文件。注意只須要配置單元測試項目,不須要對原項目作任何修改。對象

obj文件(Microsoft推出的程序編譯中間代碼文件),程序編譯時生成的中間代碼文件。目標文件,通常是程序編譯後的二進制文件,再經過連接器和資源文件連接就成可執行文件了。OBJ只給出了程序的相對地址,而可執行文件是絕對地址。blog

2. XXXtext.cpp測試文件說明

  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. }
  12. };
  13. }

本身包含原始項目被測函數頭文件」#include 「../MyProgram/my_math.h」 //添加原始項目的頭文件,建議相對路徑」資源

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

  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

3. 運行單元測試

單元測試運行,不須要提早先編譯原始程序,運行測試時會自動編譯。

在菜單欄-測試-運行選擇運行全部測試便可

選擇此項後會先編譯目標項目,而後執行全部測試類中的public中的測試函數(有不須要測試的能夠臨時改成private)。

測試結果會在測試資源管理器顯示

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

4. 其餘

4.1. 並行測試

「測試資源管理器」搜索框左側的三個雙向箭頭按鈕,點擊他會進入選中狀態,即開啓了並行測試功能。

4.2. 代碼覆蓋率測試

對於VS2015 Enterprise版本在測試菜單下「分析代碼覆蓋率」能夠利用當前單元測試分析對原始項目的代碼覆蓋率。

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

相關文章
相關標籤/搜索