寫算法時大多依靠簡單輸入驗證,經常遇到小範圍輸入正常,大範圍或特殊情況輸入結果錯誤的問題。是以寫程式之前最好先想好幾個特殊用例來測試,以驗證算法是否正确。單元測試就是個不錯的工具,而VS 2012提供了很友善的單元測試功能。
首先建立需要測試的C++項目,如果已有項目,可以跳過這個步驟。然後建立兩個檔案algs4.h和main.cpp,代碼如下:
algs4.h
int add(int a, int b)
{
return a+b;
}
int minus(int a, int b)
{
return a-b;
}
main.cpp
#include "algs4.h"
int main()
{
return 0;
}
待測試項目建立完成。接下來需要在目前解決方案中建立本機單元測試項目,如下圖:
完成項目建立之後,為了讓測試方法能夠通路待測試的代碼,需要在測試項目中添加待測試項目的引用。右擊測試項目,在屬性對話框裡找到VC++目錄->包含目錄
編輯包含目錄項,在彈出的對話框中添加待測試項目的檔案目錄:
完成後就可以在測試項目中引入待測試函數。簡單的測試代碼如下:
#include "stdafx.h"
#include "CppUnitTest.h"
#include "algs4.h"
using namespaceMicrosoft::VisualStudio::CppUnitTestFramework;
namespace UnitTestAlgs4
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
//TODO: 在此輸入測試代碼
Assert::AreEqual(20,add(10,10));
}
};
}
運作測試時,可以在菜單欄找到測試->運作->所有測試,或者直接右擊,選擇運作測試
測試結果可以在測試資料總管中檢視:
不過以上的配置隻能測試頭檔案中的代碼,而大多情況下頭檔案中并不包括函數的實作,這時,測試項目僅包含待測試項目的檔案目錄是不夠的,還需要添加對.obj檔案的引用。
假設待測試項目的檔案及代碼如下:
int add(int a, int b);
int minus(int a, int b);
algs4.cpp
#include "algs4.h"
int add(int a, int b)
{
return a+b;
}
int minus(int a, int b)
{
return a-b;
}
main.cpp與上面的一緻。
打開測試項目的屬性對話框,修改連結器的正常->附加庫目錄和輸入->附加依賴項兩個屬性:
向附加庫目錄中添加待測試函數的.obj檔案目錄
如E:\VS2012\Algorithms4\Algorithms4\Debug
向附加依賴項中僅添加待測試函數的.obj檔案名,這裡是algs4.obj。
設定好後就能夠正常運作測試。
另外,在測試資料總管中右擊測試名,可以分析測試代碼的覆寫率。由于目前測試代碼沒有添加對minus的測試,是以它的已覆寫率是0。覆寫率測試還可以測試條件語句等分支語句的覆寫情況。