You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.0 KiB

OOP Exercise - Google Test

使用方法

clone 專案並進入專案目錄

git clone https://gitea.cglab.cs.nccu.edu.tw/yhchen/gtest_exercise.git
cd gtest_exercise

建立 build 目錄,所有編譯需要的檔案會被建立在這個目錄裡面

mkdir build
cd build

使用 cmake 建立 makefile並編譯檔案

cmake ..
make

進入 unittest 目錄,如果有看到 utest 執行檔,代表編譯順利完成

cd unittest
./utest

練習內容

src 目錄中含有 sphere 物件的宣告及實作,但是這個程式碼中有一些邏輯錯誤,同學需完成以下步驟:

  1. 編寫 unittest 使 sphere 程式碼覆蓋率達到 80% 以上
  2. 修改 sphere.cc 程式碼,使程式的邏輯完全正確

覆蓋率計算

這個專案的 cmake 檔案包含計算覆蓋率的工具,會在編譯 unittestsrc 目錄時同時產生覆蓋率統計的檔案在 build/資料夾位置/CMakeFiles/專案名稱.dir/檔案名稱.cc.gcno,在執行過程式之後,可以執行下列指令顯示覆蓋率

gcov <gcno檔位置>

sphere.cc 為例,要查看覆蓋率可以執行

cd build/src/CMakeFiles/sphere.dir
gcov sphere.cc.gcno

在 macos 中,預設使用的內建 gcov 會無法開啟生成的檔案,需要使用 homebrew 安裝的 gcov安裝 gcc 時會自動安裝),通常為 gcov-12,執行下列指令能夠檢查是否使用內建的 gcov

which gcov

如果輸出為 /usr/bin/gcov,就代表使用的是內建的 gcov。

附錄

GTest 指令

ASSERT EXPECT 說明
ASSERT_TRUE(condition) EXPECT_TRUE(condition) 檢查是否為真
ASSERT_FALSE(condition) EXPECT_FALSE(condition) 檢查是否為假
ASSERT_EQ(expected,actual) EXPECT_EQ(expected,actual) 檢查數值是否相等
ASSERT_NE(val1,val2) EXPECT_NE(val1,val2) 檢查數值是否不相等
ASSERT_LT(val1,val2) EXPECT_LT(val1,val2) val1 < val2
ASSERT_LE(val1,val2) EXPECT_LE(val1,val2) val1 <= val2
ASSERT_GT(val1,val2) EXPECT_GT(val1,val2) val1 > val2
ASSERT_GE(val1,val2) EXPECT_GE(val1,val2) val1 >= val2
ASSERT_STREQ(str1,str2) EXPECT_STREQ(str1,str2) 檢查字串是否相等
ASSERT_STRNE(str1,str2) EXPECT_STRNE(str1,str2) 檢查字串是否不相等
ASSERT_STRCASEEQ(str1,str2) EXPECT_STRCASEEQ(str1,str2) 檢查字串是否相等(不分大小寫)
ASSERT_STRCASENE(str1,str2) EXPECT_STRCASENE(str1,str2) 檢查字串是否不相等(不分大小寫)

Linux 環境下安裝 cmake (以 ubuntu 為例)

若環境有需要,請自行加上 sudo

apt update
apt install g++ cmake

Windows 環境下安裝 cmake

可以安裝 Windows Subsystem of Linux並按照上述 Linux 的步驟操作

MacOS 環境下安裝 cmake

需先安裝 brew安裝完成後執行

brew install gcc cmake

若使用的是 M1 mac需要手動將 g++ 加入 PATH請自行 google