如何在VS2013中進(jìn)行Boost單元測(cè)試
對(duì)于如何在VS2013中進(jìn)行Boost單元測(cè)試,這方面資料太少。自己也因此走了不少彎路。下文將會(huì)闡述一下如何在VS2013中進(jìn)行Boost單元測(cè)試。
在開始Boost單元測(cè)試之前,我們需要先安裝VS2013插件Boost Unit Test Adapter (Update 3) 以及編譯Boost庫。Boost Unit Test Adapte可以在VS2013中的“工具->擴(kuò)展與更新”中找到并安裝。對(duì)于Boost Unit Test Adapter所支持的Boost庫版本請(qǐng)參考網(wǎng)頁。我選擇的是版本號(hào)為1.55.0的Boost庫(可以在其官網(wǎng)下載得到)。在編譯Boost庫的時(shí)候,可以參考教程及博文。我選擇的是完全編譯(bjam --toolset=msvc-12.0 --build-type=complete)。
下文以幾個(gè)步驟來闡述:
1. 新建解決方案及工程
接下來,我們新建一個(gè)BoostUnitTest解決方案,然后在該方案下添加(鼠標(biāo)右擊解決方案新建項(xiàng)目)兩個(gè)項(xiàng)目。第一個(gè)項(xiàng)目是空的“WIN32”項(xiàng)目“Tested”,另一個(gè)是“Boost Unit Test Project”項(xiàng)目(新建項(xiàng)目->模板->Visual C++->Test下)“BoostUnitTest”。如下圖:
2. 在被測(cè)試工程中添加文件
在Tested工程中添加一個(gè)頭文件tested.h及源文件tested.cpp. 具體代碼如下
1 #include <iostream> 2 3 using namespace std; 4 5 class Tested 6 { 7 public: 8 9 Tested(); 10 virtual ~Tested(); 11 int add(const int a, const int b); 12 13 private: 14 15 }; |
1 #include "tested.h" 2 3 Tested::Tested() 4 { 5 6 } 7 8 Tested::~Tested() 9 { 10 11 } 12 13 int Tested::add(const int a, const int b) 14 { 15 return a + b; 16 } |
在這里,我們并不需要新建一個(gè)main函數(shù)對(duì)這個(gè)類tested進(jìn)行測(cè)試(因?yàn)槲覀円呀?jīng)有單元測(cè)試了),但一個(gè)程序默認(rèn)是需要main函數(shù)的,所以在需要在Tested項(xiàng)目屬性中進(jìn)行這樣的設(shè)置(“配置類型”改為“動(dòng)態(tài)庫(.dll)”見下圖):

BOOST_CHECK(tmpTested->add(2, 2) == 3);
單元測(cè)試運(yùn)行結(jié)果是不通過,如下圖:
至此,如何進(jìn)行一個(gè)簡(jiǎn)單的Boost單元測(cè)試的過程就完成了。
// 添加于2014.10.18 ---------------------------------------------------------------------------
現(xiàn)在,我在之前程序的基礎(chǔ)上又添加了一點(diǎn)異常測(cè)試,相關(guān)的源代碼如下:
1 #include <iostream> 2 3 using namespace std; 4 5 class Tested 6 { 7 public: 8 9 Tested(); 10 virtual ~Tested(); 11 int add(const int a, const int b); 12 void testException(); 13 14 private: 15 16 }; 1 #include "tested.h" 2 3 Tested::Tested() 4 { 5 6 } 7 8 Tested::~Tested() 9 { 10 11 } 12 13 int Tested::add(const int a, const int b) 14 { 15 return a + b; 16 } 17 18 void Tested::testException() 19 { 20 throw logic_error("my throw"); // 拋出一個(gè)邏輯錯(cuò)誤異常 21 } |
1 #define BOOST_TEST_MODULE Tested_Module // 主測(cè)試套件,一個(gè)測(cè)試項(xiàng)目中只能有一個(gè)主測(cè)試套件 2 3 #include "stdafx.h" 4 #include "D:\VSProject\BoostUnitTest\BoostUnitTest\Tested\tested.h" // 待測(cè)工程頭文件 5 6 struct Tested_Fixture // 測(cè)試夾具 7 { 8 Tested_Fixture() 9 { 10 BOOST_TEST_MESSAGE("setup fixture"); 11 tmpTested = new Tested(); 12 } 13 ~Tested_Fixture() 14 { 15 BOOST_TEST_MESSAGE("teardown fixture"); 16 delete tmpTested; 17 } 18 Tested * tmpTested; 19 }; 20 21 BOOST_FIXTURE_TEST_SUITE(Tested_test, Tested_Fixture) // 測(cè)試套件 22 23 BOOST_AUTO_TEST_CASE(Tested_Method_add_Test) // 測(cè)試用例 24 { 25 // TODO: Your test code here 26 BOOST_WARN(tmpTested->add(2, 2) == 4); // WARN型預(yù)言檢測(cè) 27 BOOST_CHECK(tmpTested->add(2, 2) == 4); // CHECK型預(yù)言檢測(cè) 28 BOOST_REQUIRE(tmpTested->add(2, 2) == 4); // REQUIRE型預(yù)言檢測(cè) 29 30 } 31 32 BOOST_AUTO_TEST_CASE(Tested_Method_testException_Test) // 測(cè)試用例 33 { 34 // TODO: Your test code here 35 BOOST_REQUIRE_NO_THROW(tmpTested->testException()); // 驗(yàn)證是否無異常拋出,是則為真 36 BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error); // 驗(yàn)證拋出的是否是logic_error異常 37 BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error); // 驗(yàn)證拋出的是否是runtime_error異常 38 39 } 40 41 BOOST_AUTO_TEST_SUITE_END() |
很顯示,程序的運(yùn)行結(jié)果如下:
35 BOOST_REQUIRE_NO_THROW(tmpTested->testException()); // 測(cè)試不通過
36 BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error); // 測(cè)試通過
37 BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error); // 測(cè)試不通過
如果要進(jìn)行更復(fù)雜的測(cè)試,可以參考官方文檔。
posted on 2014-10-30 10:31 順其自然EVO 閱讀(229) 評(píng)論(0) 編輯 收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄