生活随笔
收集整理的這篇文章主要介紹了
如何在VS2013中进行Boost单元测试
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
對于如何在VS2013中進(jìn)行Boost單元
測試 ,這方面資料太少。自己也因此走了不少彎路。下文將會闡述一下如何在VS2013中進(jìn)行Boost單元測試。 在開始Boost單元測試之前,我們需要先安裝VS2013插件Boost Unit?
Test ?Adapter (Update 3) 以及編譯Boost庫。Boost Unit Test Adapte可以在VS2013中的“工具->擴(kuò)展與更新”中找到并安裝。對于Boost Unit Test Adapter所支持的Boost庫版本請參考網(wǎng)頁。我選擇的是版本號為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. 在被測試工程中添加文件 在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ù)對這個(gè)類tested進(jìn)行測試(因?yàn)槲覀円呀?jīng)有
單元測試 了),但一個(gè)程序默認(rèn)是需要main函數(shù)的,所以在需要在Tested項(xiàng)目屬性中進(jìn)行這樣的設(shè)置(“配置類型”改為“動態(tài)庫(.dll)”見下圖):
接著,“生成”該工程,產(chǎn)生tested.obj文件。
3. 配置Boost單元測試工程 新建的Boost單元測試工程中有兩個(gè)源文件“BoostUnitTestSample.cpp”及“BoostUnitTest.cpp”(還有stdafx.h、stdafx.cpp、targetver.h),前一個(gè)文件是樣例,可以不要,后一個(gè)文件可以當(dāng)作我們的單元測試源文件。 先對該工程進(jìn)行配置:
4. 進(jìn)行Boost單元測試 注:我們在這時(shí)只進(jìn)行簡單的單元測試,更加復(fù)雜的測試請參考文章最后給出的鏈接。 在BoostUnitTest工程中的文件“BoostUnitTest.cpp”(也可新建)添加如下代碼:
1 #define BOOST_TEST_MODULE Tested_Module ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 主測試套件,一個(gè)測試項(xiàng)目中只能有一個(gè)主測試套件 2 3 #include "stdafx.h" 4 #include "D:\VSProject\BoostUnitTest\BoostUnitTest\Tested\tested.h" ? ?// 待測工程頭文件 5 6 struct Tested_Fixture ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 測試夾具 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) ? ? ? ? ? ? ? ? ?// 測試套件 22 23 BOOST_AUTO_TEST_CASE( Tested_Method_add_Test) ? ? ? ? ? ? ? ? ? ? ? ? ?// 測試用例 24 { 25 ? ? ?// TODO: Your test code here 26 ? ? BOOST_WARN(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ? ? ? // WARN型預(yù)言檢測 27 ? ? BOOST_CHECK(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ? ? ?// CHECK型預(yù)言檢測 28 ? ? BOOST_REQUIRE(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ? ?// REQUIRE型預(yù)言檢測 29 } 30 31 BOOST_AUTO_TEST_SUITE_END()
點(diǎn)擊“生成->生成解決方案”(預(yù)先打開“測試->窗口->測試資源管理器”)可以看到在“測試資源管理器”中出現(xiàn)了“BoostUnitTest”這個(gè)單元測試用例,如下圖: 注:如果電腦安裝有殺毒軟件(如360),“生成解決方案”的時(shí)候可能會提示:error LNK1104: 無法打開文件“...\BoostUnitTest\Debug\Tested.dll"。這是因?yàn)闅⒍拒浖r截了單元測試工程對被測試工程.dll文件的訪問。比較簡單的方法是將殺毒軟件關(guān)閉就OK了。
點(diǎn)擊“全部運(yùn)行”,可以看到該測試用例變綠,說明測試通過,如下圖:
如果我們將“BoostUnitTest.cpp”中的第13行改成: BOOST_CHECK(tmpTested->add(2, 2) == 3); 單元測試運(yùn)行結(jié)果是不通過,如下圖: 至此,如何進(jìn)行一個(gè)簡單的Boost單元測試的過程就完成了。 // 添加于2014.10.18 --------------------------------------------------------------------------- 現(xiàn)在,我在之前程序的基礎(chǔ)上又添加了一點(diǎn)異常測試,相關(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 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 主測試套件,一個(gè)測試項(xiàng)目中只能有一個(gè)主測試套件 2 3 #include "stdafx.h" 4 #include "D:\VSProject\BoostUnitTest\BoostUnitTest\Tested\tested.h" ? ?// 待測工程頭文件 5 6 struct Tested_Fixture ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 測試夾具 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) ? ? ? ? ? ? ? ?// 測試套件 22 23 BOOST_AUTO_TEST_CASE(Tested_Method_add_Test) ? ? ? ? ? ? ? ? ? ? ? ?// 測試用例 24 { 25 ? ? ?// TODO: Your test code here 26 ? ? BOOST_WARN(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ? ? ?// WARN型預(yù)言檢測 27 ? ? BOOST_CHECK(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ? ? ?// CHECK型預(yù)言檢測 28 ? ? BOOST_REQUIRE(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ?// REQUIRE型預(yù)言檢測 29 30 } 31 32 BOOST_AUTO_TEST_CASE(Tested_Method_testException_Test) ? ? ? ? ? ? ? ?// 測試用例 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()); ? ? ? ? ? ? ?// 測試不通過 36 BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error); ? ?// 測試通過 37 BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error); ?// 測試不通過 如果要進(jìn)行更復(fù)雜的測試,可以參考官方文檔。
最新內(nèi)容請見作者的GitHub頁:http://qaseven.github.io/
總結(jié)
以上是生活随笔 為你收集整理的如何在VS2013中进行Boost单元测试 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。