前面搭建好了gtest和gmock的環境,並執行了原生的例子。
接下來開始進行實際使用。
本篇學習函式的測試。
建立目錄
在上篇建立的mycode路徑下,建立allcode目錄,用於存放所有待測**,
裡面再建立兩個資料夾:
在allcode同級目錄下建立testsuits資料夾,用於存放測試套件(用例)檔案
建立好的目錄如下:
2. 編寫待測**和測試用例
假設待測**是乙個開方函式,標頭檔案如下:
cpp檔案如下:
測試用例檔案如下:
至此待測原始碼準備完成。
因為我們建立了目錄和原始碼,makefile中的標頭檔案路徑要加上我們定義的路徑,
修改如下:
所有makefile的內容如下:
cd 進入googletest-release-1.8.1/googlemock/make/ 目錄gtest_dir =..
/../googletest
gtest_lib_dir =
.gmock_dir =..
user_dir =..
/mycode
cppflags +
=-isystem $(gtest_dir)
/include -isystem $(gmock_dir)
/include \
-isystem $(gmock_dir)
/mycode -isystem $(gmock_dir)
/mycode/allcode/include
cxxflags +
=-g -wall -wextra -pthread -std=c++
11gtest_libs = libgtest.a libgtest_main.a libgmock.a libgmock_main.a
tests = run_test
gtest_headers = $(gtest_dir)
/include/gtest/*.h \
$(gtest_dir)/include/gtest/internal/*.h
gmock_headers = $(gmock_dir)/include/gmock/*.h \
$(gmock_dir)/include/gmock/internal/*.h \
$(gtest_headers)
# find source in user_dir
dirs := $(shell find $(user_dir) -maxdepth 3 -type d)
files = $(foreach d, $(dirs), $(wildcard $(d)/*.cpp))
objs = $(patsubst %.cpp, %.o, $(files))
# remove .o files
rm_objs = $(foreach d, $(dirs), $(wildcard $(d)/*.o))
all : $(gtest_libs) $(tests)
clean :
rm -f $(gtest_libs) $(tests) *.o $(rm_objs)
gtest_srcs_ = $(gtest_dir)/src/*.cc $(gtest_dir)/src/*.h $(gtest_headers)
gmock_srcs_ = $(gmock_dir)/src/*.cc $(gmock_headers)
gtest-all.o : $(gtest_srcs_)
$(cxx) $(cppflags) -i$(gtest_dir) -i$(gmock_dir) $(cxxflags) \
-c $(gtest_dir)/src/gtest-all.cc
gtest_main.o : $(gtest_srcs_)
$(cxx) $(cppflags) -i$(gtest_dir) -i$(gmock_dir) $(cxxflags) \
-c $(gtest_dir)/src/gtest_main.cc
gmock-all.o : $(gmock_srcs_)
$(cxx) $(cppflags) -i$(gtest_dir) -i$(gmock_dir) $(cxxflags) \
-c $(gmock_dir)/src/gmock-all.cc
gmock_main.o : $(gmock_srcs_)
$(cxx) $(cppflags) -i$(gtest_dir) -i$(gmock_dir) $(cxxflags) \
-c $(gmock_dir)/src/gmock_main.cc
libgtest.a : gtest-all.o
$(ar) $(arflags) $@ $^
libgtest_main.a : gtest_main.o
$(ar) $(arflags) $@ $^
libgmock.a : gmock-all.o
$(ar) $(arflags) $@ $^
libgmock_main.a : gmock_main.o
$(ar) $(arflags) $@ $^
# builds a sample test for cpp code.
%.o : %.cpp
$(cxx) $(cppflags) $(cxxflags) -c $< -o $@
$(tests) : $(objs) $(gtest_libs)
$(cxx) $(cppflags) $(cxxflags) -lpthread $^ -o $@
執行make命令進行編譯和執行測試:
執行結果:make
./run_test
單元測試用例設計方法主要有:
等價類劃分
邊界值錯誤推測 等。
**覆蓋方式主要有:
語句覆蓋
分支覆蓋(也叫判定覆蓋)
修訂條件/判定覆蓋
多重條件覆蓋 等
本例子可以看出,使用了等價類劃分設計用例:
等價類劃分:正值、0、負值
為了覆蓋x = 1分支,
增加了測試用例
test(sqrttest, one)
從覆蓋率上來說,這幾個測試用例還沒有達到指定的覆蓋率,為達到指定的覆蓋率,還需要設計更多的用例才行。
git clone git@github.com:tonsenwei/gtest_samples.git
使用 gtest 給 DLL 工程編寫單元測試
任何時候給你的 增加單元測試 或介面測試 都不晚,對於 c c 使用比較廣泛的單元測試框架應該非 googletest莫屬了。通常在工程 中,使用 gtest 比較廣泛的方式是以 lib 的形式來做單元測試,這種方式使用也比較簡單直接,本文就不再贅述。但是,對於大部分工程 而言,並不是只有 exe ...
gtest使用入門 5 類的測試,使用測試引數
本篇學習類的測試,並使用測試引數進行測試。待測原始碼是乙個計算器類,接下來我們對這個類進行測試。增加待測原始碼標頭檔案 增加待測原始碼cpp檔案 增加測試用例檔案如下 至此待測原始碼準備完成。因為我們只在已有的目錄增加了原檔案,沒有建立新的目錄和標頭檔案,所以makefile可以不用修改。cd 進入...
c 測試框架gtest的入門
第一次接觸和使用c 的測試框架,在這裡記錄一下 我是在linux中的clion下使用的 參考資料 我下這個版本的 需要進入目錄 cmake一下,生成靜態庫檔案.a 參考這篇 實現 不用全部拖進去,只要我們需要的部分就可以了,兩個.a是cmake之後的產物,也要加入 cmake minimum req...