1 序言——為什麼折騰google test
被逼無奈的。
最近研究google開源的基於列儲存的資料庫查詢引擎supersonic原始碼。初略的瀏覽了一遍**,竟然沒有main函式,頓時驚訝的目瞪口呆呀。對於習慣了從main函式開始,一行一行跟**的程式猿,只覺得無從下手了。看了看原始碼中的readme,supersonic提供的是資料庫查詢引擎的api,不是完整的系統,無法直接執行,也就不提供main函式了,但是可以通過test/guide目錄下的測試用例開始學習supersonic提供的豐富的api。supersonic的api都被封裝在google test中進行測試,到這引出了本文的主角google test。
先來看一眼google test的大致輪廓。
//tests negative input.
test(isprimetest, negative)
3 多種編譯方式
google test是跨平台的,提供了多種編譯的方式。不同的平台下的工程檔案放在不同的資料夾下,在msvc目錄下提供了windows下的vs工程檔案,xcode目錄下支援mac的工程檔案,還可以通過cmake編譯,也有configure編譯。也可以直接使用g++編譯。
g++編譯命令如下
g++ -isystem $/include -i$ \-pthread -c $/src/gtest-all.cc
ar -rv libgtest.a gtest-all.o
其中,gtest_dir 是專案的根目錄。首先,將src/gtest-all.cc 編譯成.o檔案,然後,將其進行打包成乙個靜態鏈結庫。接下來,可以加入自己寫的單元測試檔案。
g++ -isystem $/include -pthread path/to/your_test.cclibgtest.a \
-o your_test
編譯完成,生成可以執行的your_test程式,現在可以執行自己寫的單元測試程式了。執行例項如下:
running main() from gtest_main.cc[**********] running 6 tests from 2
test cases.
[----------] global test environment set-up.
[----------] 3
tests from factorialtest
[ run ] factorialtest.negative
[ ok ] factorialtest.negative (
0ms)
[ run ] factorialtest.zero
[ ok ] factorialtest.zero (
0ms)
[ run ] factorialtest.positive
[ ok ] factorialtest.positive (
0ms)
[----------] 3 tests from factorialtest (0
ms total)
[----------] 3
tests from isprimetest
[ run ] isprimetest.negative
[ ok ] isprimetest.negative (
0ms)
[ run ] isprimetest.trivial
[ ok ] isprimetest.trivial (
0ms)
[ run ] isprimetest.positive
[ ok ] isprimetest.positive (
0ms)
[----------] 3 tests from isprimetest (0
ms total)
[----------] global test environment tear-down
[**********] 6 tests from 2 test cases ran. (1
ms total)
[ passed ]
6 tests.
4 通過makefile編譯
在make目錄下,有google test提供的makefile檔案,可以簡單的修改此makefile檔案,執行我們自己寫的單元測試用例。在此過程中一般需要三個檔案,
sample.h //待測試函式的標頭檔案
sample.cc //待測試的函式體
sample_unittest.cc //單元測試用例
編寫單元測試用例sample_unittest.cc只需要三步,
第一步,包含需要的標頭檔案,包括自定義的待測試函式以及gtest.h
#include "sample1.h
"#include
"gtest/gtest.h
"
第二步,使用test巨集定義來定義測試用例
//tests factorial of positive numbers.
test(factorialtest, positive)
test巨集定義有兩個引數,測試用例的名字factorialtest和測試名positive。巨集定義的函式體內部是測試的邏輯。
第三步,呼叫 run_all_tests() 執行所有的測試用例。
檔案準備好之後,可以修改makefile檔案了。
gtest_dir =..user_dir = ../..
tests =merge_lists_unittest
merge_lists.o : $(user_dir)/merge_lists.cc $(user_dir)/merge_lists.h $(gtest_headers)
$(cxx) $(cppflags) $(cxxflags) -c $(user_dir)/merge_lists.cc
merge_lists_unittest.o : $(user_dir)/merge_lists_unittest.cc
\ $(user_dir)/merge_lists.h $(gtest_headers)
$(cxx) $(cppflags) $(cxxflags) -c $(user_dir)/merge_lists_unittest.cc
merge_lists_unittest : merge_lists.o merge_lists_unittest.o gtest_main.a
$(cxx) $(cppflags) $(cxxflags) -lpthread $^ -o $@
gtest_dir:google test的工程目錄
user_dir: 帶測試的函式的檔案目錄
ice使用簡單式例 c
在實現服務端或者客戶端的時候通常都要寫一些 公式化 的 負責ice通訊器初始化 異常捕獲,以及應用終止後的銷毀。如下 1int status 0 23 ice communicatorptr ic 45 try 67 2425 catch const ice exception e 2627 343...
WINDOWS下使用EXPECT的簡單例子
這是乙個自動登入aix伺服器的例子。2 安裝預設路徑是c program file pect 5.21bin expect.exe就在這裡 3 寫個簡單的指令碼sample.txt spawn telnet aixserver expect login send mynamer expect pas...
IOS中使用單例的簡單介紹
第 一 基本概念 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問。第二 在ios中使用單例模式的情況 1.如果說建立乙個物件會耗費很多系統資源,那麼此時採用單例模式,因為只需要乙個例項,會節省all...