qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          如何在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)”見下圖):
          接著,“生成”該工程,產(chǎn)生tested.obj文件。
            3. 配置Boost單元測(cè)試工程
            新建的Boost單元測(cè)試工程中有兩個(gè)源文件“BoostUnitTestSample.cpp”及“BoostUnitTest.cpp”(還有stdafx.h、stdafx.cpp、targetver.h),前一個(gè)文件是樣例,可以不要,后一個(gè)文件可以當(dāng)作我們的單元測(cè)試源文件。
            先對(duì)該工程進(jìn)行配置:
            4. 進(jìn)行Boost單元測(cè)試
            注:我們?cè)谶@時(shí)只進(jìn)行簡(jiǎn)單的單元測(cè)試,更加復(fù)雜的測(cè)試請(qǐng)參考文章最后給出的鏈接。
            在BoostUnitTest工程中的文件“BoostUnitTest.cpp”(也可新建)添加如下代碼:
            點(diǎn)擊“生成->生成解決方案”(預(yù)先打開“測(cè)試->窗口->測(cè)試資源管理器”)可以看到在“測(cè)試資源管理器”中出現(xiàn)了“BoostUnitTest”這個(gè)單元測(cè)試用例,如下圖:
            注:如果電腦安裝有殺毒軟件(如360),“生成解決方案”的時(shí)候可能會(huì)提示:error LNK1104: 無法打開文件“...\BoostUnitTest\Debug\Tested.dll"。這是因?yàn)闅⒍拒浖r截了單元測(cè)試工程對(duì)被測(cè)試工程.dll文件的訪問。比較簡(jiǎn)單的方法是將殺毒軟件關(guān)閉就OK了。
            點(diǎn)擊“全部運(yùn)行”,可以看到該測(cè)試用例變綠,說明測(cè)試通過,如下圖: 如果我們將“BoostUnitTest.cpp”中的第13行改成:
            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í)專欄

          <2014年10月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 衡山县| 永修县| 南安市| 香格里拉县| 永宁县| 武宣县| 城口县| 闵行区| 和龙市| 西林县| 交城县| 扬中市| 金寨县| 文水县| 东丽区| 阜阳市| 石楼县| 贵州省| 泗洪县| 闵行区| 永清县| 马尔康县| 长垣县| 馆陶县| 三亚市| 沅陵县| 香河县| 鄂州市| 奎屯市| 柘城县| 三都| 宁波市| 平远县| 墨玉县| 五常市| 鄂托克前旗| 平潭县| 石城县| 文水县| 河间市| 巴林右旗|