了解如何在 Exercism 上測試你的 Fortran 練習。
每個練習都會提供單元測試和一份 CMake 建置設定,實作則由你來負責。 每個測試檔案都會與你的實作連結,產生一個可執行測試的主控台執行檔。執行測試執行檔時,會為每個失敗的測試印出訊息,並在測試失敗時回報非零的結束狀態。
測試檔案的命名會是<exercise>_test.f90,所以練習「Bob」的測試檔案就是bob_test.f90。每個測試都會先有一段描述該測試的註解,接著才是以call assert_equal開頭的實際測試,例如
! Test 16: non-letters with question
call assert_equal("Sure.", hey(":) ?"), "non-letters with question")
想停用某個測試,只要用'!'把它註解掉就行了,例如
! Test 16: non-letters with question
! call assert_equal("Sure.", hey(":) ?"), "non-letters with question")
完成每個練習的流程如下:
每個練習都會附上一份CMakeLists.txt,和單元測試放在一起。裡面包含現成的 CMake 設定,會幫你處理建置。你應該不需要修改這個檔案。這份設定會假設你的實作放在以練習名稱命名的原始檔裡。
例如,練習「Bob」會預期實作位於bob.f90檔案中。
請在執行 CMake 之前,先建立好你的初始實作檔案。
如果你在為練習「Bob」執行 CMake 時沒有bob.f90這個檔案,CMake 就會產生找不到檔案的錯誤。
這些檔案可以是空的,但必須存在。
使用這份設定,只要執行cmake -G,並指定合適的產生器以及練習所在的目錄位置,CMake 就能為你的環境產生合適的專案。CMake 會產生適合你作業系統的建置指令碼。為了讓這些產生的檔案與練習的原始碼分開,通常會建立一個名為build的目錄,用來存放這些產生的建置檔案以及編譯後的程式碼。
這樣能讓你的練習資料夾保持整潔。
**注意:第一次呼叫cmake時,會自動下載 testlib。單元測試需要testlib才能運作。
由於每個練習都需要執行 CMake 來產生建置指示,你可能會想為這個指令建立一個 bash 指令碼(Linux/MacOS)或批次檔(Windows)。
CMake 建立好建置環境後,你就可以用適合自己環境的指令來建置程式碼:
make
mingw32-make.exe
nmake.exe
以下範例示範如何在不同的環境中執行 CMake。
CMake 的產生器名稱是Unix Makefiles。
假設目前的練習是bob,而且我們位於練習資料夾中:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make
這個範例展示了在執行 CMake 之前,先為實作建立空的檔案。
只要在 build 目錄中輸入 make 就能編譯測試。這應該會產生編譯時期的錯誤。修正錯誤後,再次執行make。當所有建置錯誤都修正後,執行測試:
$ ctest -V
CMake 的產生器名稱是Visual Studio 15。同一個產生器支援 Visual Studio 2017 的所有 IDE 版本:Community、Professional 和 Enterprise。假設目前的練習是bob,而且我們位於練習資料夾中:
> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "Visual Studio 15" ..
這個範例展示了在執行 CMake 之前,先為實作建立空的檔案。
CMake 的產生器名稱是MinGW Makefiles。假設目前的練習是bob,而且我們位於練習資料夾中:
> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..
這個範例展示了在執行 CMake 之前,先為實作建立空的檔案。
只要在 build 目錄中輸入 make 就能編譯測試。這應該會產生編譯時期的錯誤。修正錯誤後,再次執行make。當所有建置錯誤都修正後,執行測試:
CMake 的產生器名稱是Xcode。
假設目前的練習是bob,而且我們位於練習資料夾中:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..
這個範例展示了在執行 CMake 之前,先為實作建立空的檔案。
只要在 build 目錄中輸入 make 就能編譯測試。這應該會產生編譯時期的錯誤。修正錯誤後,再次執行make。當所有建置錯誤都修正後,執行測試:
$ ctest -V
測試相依於一個名為testlib的小型函式庫,它會在第一次用 cmake 設定建置時從 github 下載。
如果下載失敗,也可以手動下載,例如
mkdir testlib
cd testlib
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/CMakeLists.txt
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/TesterMain.f90