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.

84 lines
2.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# OOP Exercise - Google Test
## 使用方法
clone 專案並進入專案目錄
```sh
git clone https://gitea.cglab.cs.nccu.edu.tw/yhchen/gtest_exercise.git
cd gtest_exercise
```
建立 build 目錄,所有編譯需要的檔案會被建立在這個目錄裡面
```sh
mkdir build
cd build
```
使用 cmake 建立 makefile並編譯檔案
```sh
cmake ..
make
```
進入 `unittest` 目錄,如果有看到 `utest` 執行檔,代表編譯順利完成
```sh
cd unittest
./utest
```
## 練習內容
`src` 目錄中含有 `sphere` 物件的宣告及實作,但是這個程式碼中有一些邏輯錯誤,同學需完成以下步驟:
1. 編寫 unittest 使 sphere 程式碼覆蓋率達到 80% 以上
2. 修改 `sphere.cc` 程式碼,使程式的邏輯完全正確
## 覆蓋率計算
這個專案的 cmake 檔案包含計算覆蓋率的工具,會在編譯 `unittest``src` 目錄時同時產生覆蓋率統計的檔案在 `build/資料夾位置/CMakeFiles/專案名稱.dir/檔案名稱.cc.gcno`,在執行過程式之後,可以執行下列指令顯示覆蓋率
```sh
gcov <gcno檔位置>
```
在 macos 中,預設使用的內建 gcov 會無法開啟生成的檔案,需要使用 homebrew 安裝的 gcov安裝 gcc 時會自動安裝),通常為 `gcov-12`,執行下列指令能夠檢查是否使用內建的 gcov
```sh
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`
```sh
apt update
apt install g++ cmake
```
### Windows 環境下安裝 cmake
可以安裝 Windows Subsystem of Linux並按照上述 Linux 的步驟操作
### MacOS 環境下安裝 cmake
需先安裝 brew安裝完成後執行
```sh
brew install gcc cmake
```
若使用的是 M1 mac需要手動將 g++ 加入 PATH請自行 google