gtest使用入門 4 函式的單元測試

2021-10-25 02:57:50 字數 3749 閱讀 9430

前面搭建好了gtest和gmock的環境,並執行了原生的例子。

接下來開始進行實際使用。

本篇學習函式的測試。

建立目錄

在上篇建立的mycode路徑下,建立allcode目錄,用於存放所有待測**,

裡面再建立兩個資料夾:

在allcode同級目錄下建立testsuits資料夾,用於存放測試套件(用例)檔案

建立好的目錄如下:

2. 編寫待測**和測試用例

假設待測**是乙個開方函式,標頭檔案如下:

cpp檔案如下:

測試用例檔案如下:

至此待測原始碼準備完成。
因為我們建立了目錄和原始碼,makefile中的標頭檔案路徑要加上我們定義的路徑,

修改如下:

所有makefile的內容如下:

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 $@

cd 進入googletest-release-1.8.1/googlemock/make/ 目錄

執行make命令進行編譯和執行測試:

make

./run_test

執行結果:

單元測試用例設計方法主要有:

等價類劃分

邊界值錯誤推測 等。

**覆蓋方式主要有:

語句覆蓋

分支覆蓋(也叫判定覆蓋)

修訂條件/判定覆蓋

多重條件覆蓋 等

本例子可以看出,使用了等價類劃分設計用例:

等價類劃分:正值、0、負值

為了覆蓋x = 1分支,

增加了測試用例

test(sqrttest, one)
從覆蓋率上來說,這幾個測試用例還沒有達到指定的覆蓋率,為達到指定的覆蓋率,還需要設計更多的用例才行。

git clone [email protected]: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...