1. 程式人生 > >使用VS2012內建的C++測試架構進行單元測試

使用VS2012內建的C++測試架構進行單元測試

前言
在軟體開發的過程中,單元測試(Unit testing)是一個重要的coding步驟,可以讓你的程式程式碼質量大幅提升、協助你進行良好的程式架構設計,單元測試是針對程式單元(軟體設計的最小單位)來進行正確性檢驗的測試工作,在程式化程式設計中,一個單元就是單個程式、函式、過程等;對於物件導向程式設計,最小單元就是方法,包括基礎類別(超類)、抽象類、或者衍生類別(子類別)中的方法。

想要在VC++專案中,進行單元測試的Framework有很多選擇,例如: CPPUnit、Google GTest...等,自Visual Studio 2012開始,提供了內建的單元測試框架Microsoft.VisualStudio.TestTools.CppUnitTestFramework並且與VS高度整合。

建立Production Code專案
Step 1. 建立Production Code
首先,建立一個基本的Win32主控臺應用程式專案:


 

在此以一個簡單的計算器為範例,請新增Calculator.h與Calculator.cpp,並撰寫以下程式程式碼:

Calculator.h

01.#ifndef _CALCULATOR_H_ 02.#define _CALCULATOR_H_ 03. 04.namespace CalculatorProject 05.{ 06.class Calculator 07.{ 08.public: 09.int add(int x, int y); 10.
int minus(int x, int y); 11.int multiply(int x, int y); 12.int divide(int x, int y); 13.}; 14.} 15. 16.#endif /* _CALCULATOR_H_ */

Calculator.cpp

01.#include "Calculator.h" 02.using namespace CalculatorProject; 03. 04.int Calculator::add(int x, int y) 05.{ 06.return x+y; 07.} 08. 09.int Calculator::minus(
int x, int y)
10.{ 11.return x-y; 12.} 13. 14.int Calculator::multiply(int x, int y) 15.{ 16.return x*y; 17.} 18. 19.int Calculator::divide(int x, int y) 20.{ 21.return x/y; 22.}

撰寫完成後,專案應該如下圖所示:


 

Step 2. 設定Production Code組態
請在方案總管中,對CalculatorProject按右鍵,於專案屬性視窗中[組態屬性]->[一般]->[專案預設值]->[組態屬性]設定成"靜態連結庫 (.lib)"


 

建立測試專案
Step 3. 建立測試專案
請在同一方案中,新增測試專案:


 

Step 4. 設定測試專案組態
請在方案總管中,對CalculatorProjectUnitTest按右鍵,於專案屬性視窗中進行以下設定:

1. 在[VC++目錄]->[Include目錄]設定參考Production Code的標頭檔


 

2. 在[VC++目錄]->[連結庫目錄]設定參考Production Code預設的lib輸出位置


 

3. 在[連結器]->[輸入]設定連結Production Code輸出的lib


 

Step 5. 撰寫測試程式程式碼
可以先將測試專案預設的"unittest1.cpp"更名為"CalculatorTest.cpp",建議命名規則如下:
TEST_CLASS命名原則: ClassName + "Test",其中ClassName 為對應測試Production Code裡頭的類別名稱
TEST_METHOD命名原則: "test" + MethodName,其中MethodName為對應測試Production Code裡頭的方法名稱

以下為幾點注意事項:

1. 記得引入欲測試的類別之標頭檔,如: 引入#include "Calculator.h"

2. TEST_METHOD_INITIALIZE(setUp) 、TEST_METHOD_CLEANUP(tearDown) 為執行每一個TEST_CASE前、後會執行的Code

3. 可以使用Logger::WriteMessage("")來記錄測試中需要輸出的資訊

CalculatorTest.cpp

01.#include "stdafx.h" 02.#include "CppUnitTest.h" 03.#include "Calculator.h" 04.#include <iostream> 05.using namespace std; 06.using namespace Microsoft::VisualStudio::CppUnitTestFramework; 07. 08.namespace CalculatorProject 09.{ 10.TEST_CLASS(CalculatorTest) 11.{ 12.private: 13.Calculator *calculator; 14.public: 15.TEST_METHOD_INITIALIZE(setUp) 16.{ 17.// method initialization code 18.Logger::WriteMessage("CalculatorTest setUp()\n"); 19.calculator = new Calculator(); 20.} 21. 22.TEST_METHOD_CLEANUP(tearDown) 23.{ 24.// test method cleanup  code 25.Logger::WriteMessage("CalculatorTest tearDown()\n"); 26.delete calculator; 27.} 28. 29.TEST_METHOD(testAdd) 30.{ 31.Assert::AreEqual(9, calculator->add(6,3)); 32.Logger::WriteMessage("testAdd() finish testing!\n"); 33.} 34. 35.TEST_METHOD(testMinus) 36.{ 37.Assert::AreEqual(3, calculator->minus(6,3)); 38.Logger::WriteMessage("testMinus() finish testing!\n"); 39.} 40. 41.TEST_METHOD(testMultiply) 42.{ 43.Assert::AreEqual(18, calculator->multiply(6,3)); 44.Logger::WriteMessage("testMultiply() finish testing!\n"); 45.} 46. 47.TEST_METHOD(testDivide) 48.{ 49.Assert::AreEqual(2, calculator->divide(6,3)); 50.Logger::WriteMessage("testDivide() finish testing!\n"); 51.} 52.}; 53.}


 

Step 6. 開啟測試總管進行測試
撰寫完成測試程式程式碼並且建置完成後,在工具列的[測試]->[視窗]->[測試總管]叫出測試總管畫面,可以看到我們剛剛撰寫的測試範例正等待我們去執行:


 

按下黃框處的[全部執行]即可開始執行單元測試啦!

執行完測試後,我們選取該測試單元,在下方會出現[輸出]的按鈕,可以叫出測試時使用Logger紀錄的資訊歐~


 

有可以針對測試結果進行Code Coverge分析:


 

結論
相信透過上面這個簡單的小范例,讀者應該可以建立出屬於自己的Testing專案,VS 2012提供的測試專案與測試視窗,讓我們可以更方便的進行測試工作,讓我們一起建構強健、好用的應用程式吧!! ^_^

相關推薦

使用VS2012C++測試架構進行單元測試

前言 在軟體開發的過程中,單元測試(Unit testing)是一個重要的coding步驟,可以讓你的程式程式碼質量大幅提升、協助你進行良好的程式架構設計,單元測試是針對程式單元(軟體設計的最小單位)來進行正確性檢驗的測試工作,在程式化程式設計中,一個單元就是單個程式、函式

Glib 對 C 函數進行單元測試

error ati 完成 structure 是否 pac str txt b- 1. Glib 單元測試框架 Glib 為單元測試提供了一套完整的測試框架,每個測試運行包括以下幾個部分 測試數據結構 測試 setup 與 teardown 函數 測試函數 2. 單元測

Android APP測試進行單元測試的好處

許多開發者都有個習慣,常常不樂意去寫個簡單的單元測試程式來驗證自己的程式碼。對自己的程式一直非常有自信,或存在僥倖心理每次執行通過後就直接扔給測試組測試了。然而每次測試組的BUG提交過來後就會發現自己的程式還存在許多沒有想到的漏洞。但是每次修改好BUG以後還是懷著僥倖心

C#中使用NUnit進行單元測試

1. 引入NUnit的庫 2. using NUnit.Framework; 3. 類名前加[TestFixture]註解 4. 方法前加 [Test]註解 5. 整合到C# Resharper環境內,直接在類名或方法名上右鍵可執行單元測試 使用[SetUp],[Tea

NUnit.Framework在VS2015中如何進行單元測試

開放 ron 微軟 strong 擴展 分享 方案 mar 項目 微軟在VS2015中加入了自動化生成測試功能, 在需要測試的源文件的公共方法中右鍵既可以創建單元測試。 不過需要註意的是,要在公共方法中創建,否則會提示這個錯誤 如下是自動化單元測試界面,可以發

在vue-cli生成的項目中使用karma+chrome進行單元測試

使用 設計實現 測試用例 runner 服務 進行 ui界面 包含 node 用vue-cli生成項目時,如果選擇了單元測試,那麽會采用karma+mocha作為單元測試框架,默認使用的瀏覽器是PhantomJs。 Karma是一個基於Node.js的JavaScri

springMVC整合Junit4進行單元測試

main方法 pri tail println test pan ati 測試的 tco 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 用Junit做單元測試的好處多多,博主領悟到了兩點。一是不用在每個類裏面都寫main方法然後去測試;二是可以得到每個方法執行

C/S架構系統自動化測試入門

set 成了 es2017 x86 span 接口自動化測試 下載安裝 分享 msgbox 所謂C/S架構即Client/Server(客戶端/服務器架構)。雖然近年來C/S架構產品越來越少,大有被B/S(Browser/Server 瀏覽器/服務器)架構超越的趨勢,但C/

【轉載】IntelliJ IDEA配置JUnit進行單元測試

dbd ima pom.xml format height eight nsh 格式 oot 前提條件 安裝JDK,並配置好環境變量 工程已解決JUnit依賴關系(pom.xml) IDEA中JUnit配置 IDEA自帶一個JUnit插件,打開Settings窗口搜

Spring整合Junit4進行單元測試

CA spa dep pat unit ati 測試 ID sco 一. 添加依賴包(maven) <dependency>   <groupId>junit</groupId>   <artifactId>junit<

IDEA 自動生成Junit進行單元測試

沒有 src ner acc 路徑 name cep csdn ctr 1,從插件資源庫中搜索JunitGenerator V2.0版本,通過此工具自動完成test類的生成。Settings > Plugins 2,配置生成test類的路徑。Settings &

PHPstorm配置PHPunit對composer引入的php代碼進行單元測試

擴展方法 alt 安裝 load date 分享圖片 trap use str 1、 如何安裝PHPunit,這裏不展述(如需打斷點debug測試,安裝PHP的xdebug擴展方法也不展開說了 https://xdebug.org/) 2、如何進行配置 以 PHP設計

Android Studio中進行單元測試

term pack jsb java 測試的 dep create stat multi 在Android開發過程中,我們往往忽略了單元測試功能, 主要還能還是大家覺得 真機在手,運行調試特別直觀。 不過如果我們能夠養成單元測試的習慣,相信能更加提升我們應用開發的速度。

Spring Boot 項目在 IDEA 中 進行單元測試

res sin run ng- targe clas 單元測試 2.0 就會 Spring Boot提供了許多實用程序和註釋來幫助您測試應用程序。 測試由兩個模塊提供支持:spring-boot-test包含核心項,spring-boot-test-autoconfigur

Sping MVC 整合Junit4進行單元測試及常見錯誤解決

bat 手工 jar包 測試 ava spin .get sco 多個 1.Sping整合Junit4進行單元測試:使用spring-test和Junit4進行單元測試 (1)maven依賴:添加spring-test和Junit4 jar包對於jdk1.7版本,sprin

如何開始用Junit進行單元測試

nbsp gif isp public aik 分享 pan 因此 可操作性 近段時間,公司預備推動單元測試以提高轉測代碼的質量,借鑒學習一些測試大佬的經驗自己試了一把,小測我在此寫下初寫單元測試的心得,希望能和大家交流交流單元測試技術! 一、概述 1、 單元測試(

用flask開發個人部落格(28)—— 利用unittest進行單元測試

下面分析下這個webapp的單元測試模組test,請先看下目前test下的檔案結構:        目前__init__.py檔案還是空,請檢視test_basic.py的程式碼: import unittest from flask impor

如何對第一個Vue.js元件進行單元測試 (上)

  首先,為什麼要單元測試元件?   單元測試是持續整合的關鍵。通過專注於小的、獨立的實體,確保單元測試始終按預期執行,使程式碼更加可靠,你可以放心地迭代你的專案而不必擔壞事兒。   單元測試不僅限於指令碼。可以獨立測試的任何東西都是可單元測試的,只要你遵循一些好的做法。這些例項包括單一責任、可預測性和鬆

如何對第一個Vue.js元件進行單元測試 (下)

我們的首次測試 讓我們來寫首個測試。我們首先需要使用shallowMount手動掛載我們的元件,並將其儲存在我們將執行斷言的變數中。我們還可以通過propsData屬性傳遞道具作為物件。 已安裝的元件是一個物件,它有一些實用方法: 然後,我們可以寫第一個斷言: 讓我們來

如何對第一個Vue.js組件進行單元測試 (下)

發生 清理 定位元素 after 斷言 www. array 12c 良好的 我們的首次測試 讓我們來寫首個測試。我們首先需要使用shallowMount手動掛載我們的組件,並將其存儲在我們將執行斷言的變量中。我們還可以通過propsData屬性傳遞道具作為對象。