生活随笔
收集整理的這篇文章主要介紹了
如何在VS2013中进行Boost单元测试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于如何在VS2013中進行Boost單元
測試 ,這方面資料太少。自己也因此走了不少彎路。下文將會闡述一下如何在VS2013中進行Boost單元測試。 在開始Boost單元測試之前,我們需要先安裝VS2013插件Boost Unit?
Test ?Adapter (Update 3) 以及編譯Boost庫。Boost Unit Test Adapte可以在VS2013中的“工具->擴展與更新”中找到并安裝。對于Boost Unit Test Adapter所支持的Boost庫版本請參考網頁。我選擇的是版本號為1.55.0的Boost庫(可以在其官網下載得到)。在編譯Boost庫的時候,可以參考教程及博文。我選擇的是完全編譯(bjam --toolset=msvc-12.0 --build-type=complete)。
下文以幾個步驟來闡述: 1. 新建解決方案及工程 接下來,我們新建一個BoostUnitTest解決方案,然后在該方案下添加(鼠標右擊解決方案新建項目)兩個項目。第一個項目是空的“WIN32”項目“Tested”,另一個是“Boost Unit Test Project”項目(新建項目->模板->Visual C++->Test下)“BoostUnitTest”。如下圖: 2. 在被測試工程中添加文件 在Tested工程中添加一個頭文件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 }
在這里,我們并不需要新建一個main函數對這個類tested進行測試(因為我們已經有
單元測試 了),但一個程序默認是需要main函數的,所以在需要在Tested項目屬性中進行這樣的設置(“配置類型”改為“動態庫(.dll)”見下圖):
接著,“生成”該工程,產生tested.obj文件。
3. 配置Boost單元測試工程 新建的Boost單元測試工程中有兩個源文件“BoostUnitTestSample.cpp”及“BoostUnitTest.cpp”(還有stdafx.h、stdafx.cpp、targetver.h),前一個文件是樣例,可以不要,后一個文件可以當作我們的單元測試源文件。 先對該工程進行配置:
4. 進行Boost單元測試 注:我們在這時只進行簡單的單元測試,更加復雜的測試請參考文章最后給出的鏈接。 在BoostUnitTest工程中的文件“BoostUnitTest.cpp”(也可新建)添加如下代碼:
1 #define BOOST_TEST_MODULE Tested_Module ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 主測試套件,一個測試項目中只能有一個主測試套件 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型預言檢測 27 ? ? BOOST_CHECK(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ? ? ?// CHECK型預言檢測 28 ? ? BOOST_REQUIRE(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ? ?// REQUIRE型預言檢測 29 } 30 31 BOOST_AUTO_TEST_SUITE_END()
點擊“生成->生成解決方案”(預先打開“測試->窗口->測試資源管理器”)可以看到在“測試資源管理器”中出現了“BoostUnitTest”這個單元測試用例,如下圖: 注:如果電腦安裝有殺毒軟件(如360),“生成解決方案”的時候可能會提示:error LNK1104: 無法打開文件“...\BoostUnitTest\Debug\Tested.dll"。這是因為殺毒軟件攔截了單元測試工程對被測試工程.dll文件的訪問。比較簡單的方法是將殺毒軟件關閉就OK了。
點擊“全部運行”,可以看到該測試用例變綠,說明測試通過,如下圖:
如果我們將“BoostUnitTest.cpp”中的第13行改成: BOOST_CHECK(tmpTested->add(2, 2) == 3); 單元測試運行結果是不通過,如下圖: 至此,如何進行一個簡單的Boost單元測試的過程就完成了。 // 添加于2014.10.18 --------------------------------------------------------------------------- 現在,我在之前程序的基礎上又添加了一點異常測試,相關的源代碼如下:
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"); ? ?// 拋出一個邏輯錯誤異常 21 }
1 #define BOOST_TEST_MODULE Tested_Module ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 主測試套件,一個測試項目中只能有一個主測試套件 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型預言檢測 27 ? ? BOOST_CHECK(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ? ? ?// CHECK型預言檢測 28 ? ? BOOST_REQUIRE(tmpTested->add(2, 2) == 4); ? ? ? ? ? ? ? ? ? ? ? ?// REQUIRE型預言檢測 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()); ? ? ? ? ? ? ? ?// 驗證是否無異常拋出,是則為真 36 ? ? BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error); ? ?// 驗證拋出的是否是logic_error異常 37 ? ? BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error); ? ?// 驗證拋出的是否是runtime_error異常 38 39 } 40 41 BOOST_AUTO_TEST_SUITE_END()
很顯示,程序的運行結果如下: 35 BOOST_REQUIRE_NO_THROW(tmpTested->testException()); ? ? ? ? ? ? ?// 測試不通過 36 BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error); ? ?// 測試通過 37 BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error); ?// 測試不通過 如果要進行更復雜的測試,可以參考官方文檔。
最新內容請見作者的GitHub頁:http://qaseven.github.io/
總結
以上是生活随笔 為你收集整理的如何在VS2013中进行Boost单元测试 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。