單元測試利器之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) 編輯 收藏 所屬分類: 測試學習專欄