Tesztelés a C++ kurzuson

Tanuld meg, hogyan teszteld a C++ feladataidat az Exercism-ön


Minden feladat biztosítja az unit teszteket és egy CMake build-receptet. A megvalósítást neked kell megírnod. Minden tesztfájl arra szolgál, hogy a megvalósításodhoz linkelve egy konzolos futtatható fájlt hozzon létre, amely lefuttatja a teszteket. A teszt futtatható fájljának futtatása minden sikertelen teszthez üzenetet ír ki, és nullától eltérő kilépési státuszt jelez, ha a tesztek elbuknak.

Megjegyzés: A kódodat minden alkalommal leteszteljük a tesztegyüttessel, amikor lefordítod a projektedet. Ha a kódod nem megy át egy vagy több teszten, de érvényes C++ kód, akkor is le fog fordulni.

Az egyes feladatok kidolgozása a következő lépésekből áll:

  • A kezdeti build létrehozása CMake-mel
  • Minden unit tesztnél:
    • Oldd meg a fordítási hibákat, hogy a teszt elbukjon.
    • Csak annyit valósíts meg, hogy a teszt átmenjen.
    • Refaktoráld a megvalósításodat, hogy javítsd az olvashatóságot, csökkentsd az ismétlődéseket stb.
    • Vedd ki a megjegyzésből a következő tesztet

A kezdeti build létrehozása CMake-mel

Minden feladat hoz magával egy CMakeLists.txt fájlt az unit tesztekkel együtt. Ez tartalmazza az előre elkészített CMake-receptet, amely elvégzi helyetted a buildet. Ezt a fájlt valószínűleg nem kell szerkesztened. A mellékelt recept azt feltételezi, hogy a megvalósításod egy fejléc- és egy forrásfájlból áll, amelyek a feladatról kapták a nevüket.

Például a bob feladat a megvalósítást a bob.h és bob.cpp fájlban várja. A nevükben kötőjelet tartalmazó feladatoknál a forrásfájlokról feltételezzük, hogy alulvonást használnak, így a word-count a word_count.h és word_count.cpp fájlt várja. Dönthetsz úgy, hogy a megvalósításod elég egyszerű ahhoz, hogy teljes egészében a fejlécben legyen, ilyenkor elhagyhatod a cpp fájlt.

A kezdeti megvalósításfájljaidat a CMake futtatása előtt hozd létre. Ha a bob feladatnál a CMake futtatásakor nem léteznek a bob.h és bob.cpp fájlok, a CMake hibát jelez a nem található fájlok miatt. Ezek a fájlok lehetnek üresek, de létezniük kell.

Ezzel a recepttel a CMake a környezetedhez illő projektet tud generálni, 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 generál. Hogy a generált fájlok elkülönüljenek a feladat forráskódjától, gyakori, hogy létrehozunk egy build nevű könyvtárat, amelyben a generált build fájlok és a lefordított kód is helyet kapnak. Így a feladat mappája rendezett és áttekinthető marad.

Miután a CMake létrehozta a build környezetet, a kódodat a környezetedhez illő paranccsal fordíthatod le:

  • Linux make-kel: make
  • Windows Visual Studióval: Válaszd a menüből a Build / Build Solution pontot.
  • MacOS Xcode-dal: Válaszd ki az eszköztárról a Build pontot
  • MacOS „Unix Makefile"-lel: make Ha az Exercism CLI alkalmazást használod

Az alábbiakban példákat látsz arra, hogyan futtathatod a CMake-et különböző környezetekben.

Linux 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.{h,cpp}
$ 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. Ennek fordítási idejű hibákat kell eredményeznie. Amint kijavítottad a hibákat, a make lefordítja és lefuttatja a teszteket.

Windows Visual Studióval

A Visual Studio natívan támogatja a CMake-projekteket, így nem kell külön telepítened a CMake-et, sem a Visual Studión kívül futtatnod. Kövesd ezt az útmutatót, hogy beállítsd a CMake-projektet a Visual Studióban.

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.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

Ez a példa legenerálja az XCode fájlokat, hogy megnyithasd a projektet az XCode-ban. Előfordulhat, hogy a projekt XCode-ban való megnyitása után hozzá kell adnod egy új célt. Új célhoz válaszd a menüből a File -> New -> Target pontot, OS X \ Application \ Command Line Tool -> Next, majd nyelvként a C++-t, és adj meg egy célnevet. A kódot a cél segítségével futtasd.

Ha a terminálod Xcode x.x not supported hibát dob, nagy valószínűséggel nincs telepítve az Xcode a gépedre, vagy a verziód elavult. Töltsd le és telepítsd az Xcode-ot az App Store-ból vagy ezen a linken keresztül. A The CXX compiler identification is unknown üzenethez hasonló hibák valószínűleg megoldódnak, ha követed a GCC telepítésére vonatkozó utasításokat, vagy a fenti bekezdés szerint hozzáadsz egy új célt az Xcode-ban.

MacOS make-kel az Exercism CLI használatakor

Ez a példa kifejezetten azoknak nyújt segítséget, akik az Exercism CLI alkalmazást szeretnék használni a C++ feladataik beállításához, teszteléséhez és beküldéséhez.

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.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

Ebben a példában valóban létrehozzuk az üres fájlokat a megvalósításhoz a CMake futtatása előtt, de nem hozunk létre üres build könyvtárat. Ennek az az oka, hogy az Exercism CLI a gyökérkönyvtárban lévő .exercism/metadata.json fájlt használja a tesztesetek feldolgozásához.

Egyszerűen írd be az exercism test parancsot a gyökérkönyvtárban a tesztek lefordításához. Ennek fordítási idejű hibákat kell eredményeznie. Amint kijavítottad a hibákat, az exercism test újbóli lefuttatása lefordítja és végrehajtja a teszteket az Exercism CLI segítségével.