qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          單元測試利器之google test

           一、概述
            gtest是Google開源的一款跨平臺的C++單元測試框架,支持自動發現測試、斷言集、用戶定義的斷言、death測試、致命與非致命的失敗、類型參數化測試、各類運行測試的選項和XML的測試報告,更多信息請參看官網,也可以參看這里。
            二、安裝
            點擊這里下載gtest,當前最新的穩定版本是gtest-1.7.0,如下來安裝gtest:
            #unzip gtest-1.7.0.zip
            #cd gtest-1.7.0
            #./configure
            #make
            確認lib/.libs目錄下生成了libgtest.a和libgtest_main.a,這是測試程序需要鏈接的兩個庫。
            三、測試
            下面將舉例說明如何應用gtest來做單元測試
            1、被測試程序
            編寫被測試程序,在foo.h中編寫函數max,求兩個數中的大數:
          #ifndef __FOO_H__
          #define __FOO_H__
          int max(int a, int b)
          {
          return a>b?a:b;
          }
          #endif
            2、測試程序
            編寫測試程序test_foo.cpp來對foo.h進行測試:
          #include "gtest/gtest.h"
          #include "foo.h"
          TEST(foo, max)
          {
          EXPECT_EQ(2, max(2, 1));
          EXPECT_EQ(3, max(2, 3));
          }
          int main(int argc, char **argv)
          {
          ::testing::InitGoogleTest(&argc, argv);
          return RUN_ALL_TESTS();
          }

           3、編譯測試
          #g++ -g test_foo_cpp -o test_foo \
          #-I../gtest-1.7.0/include \
          #../gtest-1.7.0/lib/.libs/libgtest.a \
          #../gtest-1.7.0/lib/.libs/libgtest_main.a \
          #-lpthread
            編譯鏈接生成可執行文件test_foo,執行結果如下:
            4、測試說明
            (1)用TEST宏編寫測試用例
            gtest提供了TEST宏來編寫測試用例,這個宏有兩個參數,這兩個參數只是起到提示作用,可以根據需要如下理解或使用:
            (A)第一個參數表示測試用例名稱,第二個參數表示測試名稱;
            (B)第一個參數表示類名,第二個參數表示方法名;
            (C)第一個參數表示文件名,第二個參數表示函數名。
            比如前面test_foo.cpp中的TEST(foo, max)就是采用的(C)這種方式。
            (2)用EXPECT_*/ASSERT_*宏設置檢查點
            gtest提供了一系列EXPECT_*和ASSERT_*宏在測試用例中設置檢查點進行檢查,EXPECT系列和ASSERT系列宏的區別在于:
            (A)EXPECT_*失敗時,用例繼續往下執行。
            (B)ASSERT_*失敗時,直接在當前函數中返回,當前函數中ASSERT_*后面的語句將不會執行。
            比如前面TEST(foo, max)函數中的語句EXPECT_EQ(2, max(2, 1))用于測試max(2, 1)的執行結果是否等于2,如果不相等,則用例執行失敗,否則成功。
            (3)初始化環境變量設置用例
            gtest測試用例允許接收一系列命令行參數以進行一些初始化操作,通常在main函數中調用::testing::InitGoogleTest(&argc, argv)來初始化一些環境變量。
            (4)運行測試用例
            一切準備妥當后,接著就運行所有測試用例以完成單元測試。gtest提供了RUN_ALL_TEST()宏用于調用所有TEST宏編寫的測試用例以達到我們的終極目標。

          posted on 2013-10-14 10:16 順其自然EVO 閱讀(627) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2013年10月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 兰西县| 万源市| 万载县| 香河县| 东至县| 平昌县| 沁源县| 双桥区| 津南区| 依兰县| 师宗县| 且末县| 保德县| 河西区| 大田县| 舟山市| 东至县| 呼图壁县| 称多县| 贡觉县| 高州市| 宁津县| 五寨县| 策勒县| 南川市| 兴和县| 陇西县| 开封市| 海淀区| 新野县| 山西省| 武汉市| 措勤县| 呼玛县| 宜黄县| 利川市| 罗平县| 美姑县| 个旧市| 蒙自县| 徐闻县|