Tesztelés a Fortran-kurzuson

Tanuld meg, hogyan tesztelheted a Fortran-feladataidat az Exercism-ön


Minden feladathoz tartoznak az egységtesztek és egy CMake-fordítási recept. A megvalósítást neked kell elkészítened. Az egyes tesztfájlok arra készültek, hogy a megvalósításodhoz linkelve egy konzolos futtatható programot hozzanak létre, amely lefuttatja a teszteket. A tesztprogram futtatásakor minden sikertelen tesztnél üzenetet ír ki, és ha a tesztek elbuknak, nullától eltérő kilépési státusszal tér vissza.

A tesztfájl neve <exercise>_test.f90 lesz, tehát a „Bob” feladat esetében a teszteket tartalmazó fájl a bob_test.f90. Minden teszt előtt egy komment írja le a tesztet, majd maga a teszt következik, amely call assert_equal-lel kezdődik, például.

  ! Test 16: non-letters with question
  call assert_equal("Sure.", hey(":) ?"), "non-letters with question")

Egy teszt letiltásához egyszerűen kommenteld ki egy '!'-lel, például.

  ! Test 16: non-letters with question
  ! call assert_equal("Sure.", hey(":) ?"), "non-letters with question")

Az egyes feladatok végigvitele a következő folyamatból áll:

  • A kezdeti build létrehozása CMake-mel
  • Minden egyes egységtesztnél:
    • Javítsd ki a fordítási hibákat, hogy a teszt elbukjon.
    • Valósíts meg éppen annyit, hogy a teszt sikeres legyen.
    • Alakítsd át a megvalósítást az olvashatóság javítása, a kódismétlés csökkentése stb. érdekében.
    • Vedd ki a megjegyzésjelet a következő teszt elől

A kezdeti build létrehozása CMake-mel

Az egyes feladatok az egységtesztekkel együtt hoznak egy CMakeLists.txt fájlt is. Ez tartalmazza a kész CMake-receptet, amely elvégzi helyetted a buildet. Ezt a fájlt elvileg nem kell szerkesztened. A kapott recept feltételezi, hogy a megvalósításod egy, a feladatról elnevezett forrásfájlban található.

Például a „Bob” feladat egy bob.f90 fájlban lévő megvalósítást vár.

A kezdeti megvalósításfájljaidat a CMake futtatása előtt hozd létre. Ha a „Bob” feladat CMake-futtatásakor nem létezik a bob.f90 fájl, a CMake hibát jelez a nem található fájlokról. Ezek a fájlok lehetnek üresek, de létezniük kell.

Ezzel a recepttel a CMake egy, a környezetednek megfelelő projektet hoz létre, ha lefuttatod a cmake -G parancsot egy megfelelő generátorral és a feladat könyvtárának elérési útjával. A CMake az operációs rendszeredhez illő build-szkriptet hoz létre. Ahhoz, hogy ezek a generált fájlok elkülönüljenek a feladat forráskódjától, gyakori, hogy létrehozol egy build nevű könyvtárat, amelyben a generált buildfájlok és a lefordított kód is helyet kap.

Így a feladat mappája rendezett és áttekinthető marad.

**Megjegyzés: amikor először meghívod a cmake-et, a testlib automatikusan letöltődik. A testlib szükséges az egységtesztek működéséhez.

Mivel minden feladatnál le fogod futtatni a CMake-et a buildutasítások létrehozásához, érdemes lehet egy bash-szkriptet (Linux/MacOS) vagy batch-fájlt (Windows) készítened ehhez a parancshoz.

Miután a CMake létrehozta a buildkörnyezetet, a kódodat a környezetedhez illő paranccsal tudod lefordítani:

  • Linux make-kel: make
  • Windows Visual Studióval: válaszd a menüből a Build / Build Solution elemet.
  • Windows MingW-vel: mingw32-make.exe
  • Windows nMake-kel: nmake.exe
  • MacOS Xcode-dal: válaszd a Build elemet az eszköztárból

Az alábbiakban példákat látsz a CMake futtatására különböző környezetekben.

Linux\MacOS make-kel

A CMake generátorának neve Unix Makefiles. Feltéve, hogy az aktuális feladat a bob, és a feladat mappájában vagyunk:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

Ez a példa azt mutatja, hogyan hozzunk létre üres fájlokat a megvalósításhoz a CMake futtatása előtt.

Egyszerűen írd be a make parancsot a build könyvtárban a tesztek lefordításához. Ez fordítási időben jelentkező hibákat fog eredményezni. Miután kijavítottad a hibákat, futtasd újra a make-et. Amikor minden buildhiba megszűnt, futtasd a teszteket:

$ ctest -V

Windows Visual Studio 2017-tel

A CMake generátorának neve Visual Studio 15. Ugyanez a generátor a Visual Studio 2017 minden IDE-kiadását támogatja: Community, Professional és Enterprise. Feltéve, hogy az aktuális feladat a bob, és a feladat mappájában vagyunk:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "Visual Studio 15" ..

Ez a példa azt mutatja, hogyan hozzunk létre üres fájlokat a megvalósításhoz a CMake futtatása előtt.

Windows MingW-vel

A CMake generátorának neve MinGW Makefiles. Feltéve, hogy az aktuális feladat a bob, és a feladat mappájában vagyunk:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..

Ez a példa azt mutatja, hogyan hozzunk létre üres fájlokat a megvalósításhoz a CMake futtatása előtt.

Egyszerűen írd be a make parancsot a build könyvtárban a tesztek lefordításához. Ez fordítási időben jelentkező hibákat fog eredményezni. Miután kijavítottad a hibákat, futtasd újra a make-et. Amikor minden buildhiba megszűnt, futtasd a teszteket:

MacOS Xcode-dal

A CMake generátorának neve Xcode. Feltéve, hogy az aktuális feladat a bob, és a feladat mappájában vagyunk:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..

Ez a példa azt mutatja, hogyan hozzunk létre üres fájlokat a megvalósításhoz a CMake futtatása előtt.

Egyszerűen írd be a make parancsot a build könyvtárban a tesztek lefordításához. Ez fordítási időben jelentkező hibákat fog eredményezni. Miután kijavítottad a hibákat, futtasd újra a make-et. Amikor minden buildhiba megszűnt, futtasd a teszteket:

$ ctest -V

Testlib

A tesztek egy testlib nevű kis könyvtártól függnek, amelyet a githubról töltenek le, amikor a buildet először konfigurálják cmake-mel.

Ha a letöltés nem sikerül, kézzel is elvégezhető, például.

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