在 C++ track 上測試

了解如何在 Exercism 上測試你的 C++ 練習。


每個練習都會提供單元測試和一份 CMake 建置設定。你則負責提供實作。 每個測試檔案都會連結你的實作,產生一個執行這些測試的主控台執行檔。執行測試執行檔時,會為每個失敗的測試印出訊息,並在測試失敗時回報非零的結束狀態。

注意: 每次建置專案時,你的程式碼都會拿來和測試套件比對。即使你的程式碼沒有通過一項或多項測試,只要它是合法的 C++ 程式碼,仍然會被編譯。

完成每個練習的流程如下:

  • 用 CMake 建立初始建置
  • 針對每個單元測試:
    • 先解決編譯錯誤,讓測試能執行到失敗。
    • 只實作足以讓測試通過的部分。
    • 重構你的實作,提升可讀性、減少重複等等。
    • 取消註解下一個測試

用 CMake 建立初始建置

每個練習都會附帶一個CMakeLists.txt檔案,以及單元測試。這個檔案含有現成的 CMake 設定,會為你處理建置工作。你應該不需要編輯這個檔案。提供的設定會假設你的實作是由一個標頭檔和一個原始檔組成,檔名與練習相同。

例如,練習bob會預期實作出現在bob.h和bob.cpp中。若練習名稱中含有連字號,原始檔會改以底線命名,因此word-count預期的是word_count.h和word_count.cpp。如果你的實作夠簡單,可以全部放在標頭檔裡,那麼就能省略cpp檔。

請在執行 CMake 之前先建立好你的初始實作檔案。 如果你在為練習bob執行 CMake 時,還沒有bob.h和bob.cpp這兩個檔案,CMake 就會產生找不到檔案的錯誤。這些檔案可以是空的,但必須存在。

使用這份設定,你只要執行cmake -G,並指定合適的產生器和練習所在目錄的位置,CMake 就能為你的環境產生合適的專案。CMake 會產生適合你作業系統的建置指令碼。為了讓這些產生的檔案和你的練習原始碼分開,常見做法是建立一個名為build的目錄,用來存放產生的建置檔案,以及編譯後的程式碼。這樣能讓你的練習資料夾保持整潔。

CMake 建立好建置環境後,你就能用適合自己環境的指令來建置程式碼:

  • Linux 搭配 make:make
  • Windows 搭配 Visual Studio:從選單選擇 Build / Build Solution。
  • MacOS 搭配 Xcode:從工具列選擇 Build
  • MacOS 搭配「Unix Makefile」:make 若使用 exercism CLI 應用程式

以下示範如何在不同的環境中執行 CMake。

Linux 搭配 Make

CMake 的產生器名稱是Unix Makefiles。假設目前練習是bob,而我們位於練習資料夾中:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

這個範例示範在執行 CMake 之前,先為實作建立空檔案。

只要在建置目錄中輸入make,就能編譯測試。這應該會產生編譯時期的錯誤。錯誤修正後,make就會建置並執行測試。

Windows 搭配 Visual Studio

Visual Studio 原生支援 CMake 專案,所以你應該不需要另外安裝 CMake,也不需要在 Visual Studio 之外執行它。請依照這份指南在 Visual Studio 中設定 CMake 專案。

MacOS 搭配 Xcode

CMake 的產生器名稱是Xcode。假設目前練習是bob,而我們位於練習資料夾中:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

這個範例會產生 XCode 檔案,讓你可以在 XCode 中開啟專案。在 XCode 中開啟專案後,你可能需要新增另一個 target。新增 target 時,請從選單依序前往 File -> New -> Target,選擇 OS X \ Application \ Command Line Tool -> Next,語言選 C++,並提供 target 名稱。接著用這個 target 執行程式碼。

如果你的終端機拋出Xcode x.x not supported錯誤,很可能是你的電腦沒有安裝 Xcode,或是你的版本過舊。請透過 App Store 或這個連結下載並安裝 Xcode。類似The CXX compiler identification is unknown的錯誤,通常可以依照安裝 GCC 的說明,或按照上一段所述在 Xcode 中新增另一個 target 來解決。

MacOS 搭配 Make 使用 Exercism CLI 時

這個範例特別適合想使用 Exercism CLI 應用程式來設定、測試和提交 C++ 練習的人。

CMake 的產生器名稱是Unix Makefiles。假設目前練習是bob,而我們位於練習資料夾中:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

在這個範例中,我們確實會在執行 CMake 之前為實作建立空檔案,但不會建立空的建置目錄。這是因為 Exercism CLI 會使用根目錄中的.exercism/metadata.json檔案來解析測試案例。

只要在根目錄中輸入exercism test,就能編譯測試。這應該會產生編譯時期的錯誤。錯誤修正後,再次執行exercism test就會透過 Exercism CLI 建置並執行測試。