使用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
?
view sourceprint? 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
?
view sourceprint? 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
?
view sourceprint? 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提供的測試項目與測試窗口,讓我們可以更方便的進行測試工作,讓我們一起建構強健、好用的應用程序吧!! ^_^
總結
以上是生活随笔為你收集整理的使用VS2012内建的C++测试架构进行单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈C++中内存分配、函数调用和返回值问
- 下一篇: C++设计模式-Prototype原型模