Tanuld meg, hogyan teszteld a YAMLScript feladataidat az Exercism-ön
Az YAMLScriptben írt Exercism-feladatok megoldásainak tesztelése rendkívül egyszerű. Könnyű futtatni és könnyű megérteni.
Nem kell mást tenned, mint futtatni a make test parancsot a feladat könyvtárában.
Amikor először futtatod a make test parancsot, minden teszt sikertelen lesz,
egyszerűen azért, mert még nem írtál kódot a tesztek teljesítéséhez.
A feladatmegoldás szokásos menete, hogy a make test paranccsal kezdesz, majd
egyszerre egy tesztre összpontosítasz, és kódot írsz, hogy az a teszt sikeres
legyen. Amikor minden teszt sikeres, készen is vagy!
Bónuszként a make test futtatása arról is gondoskodik, hogy a ys YAMLScript-értelmező
megfelelő verziója (amire az adott feladatnak szüksége van) a megfelelő helyre (a
/path/to/exercism/yamlscript/.local/ könyvtárba) legyen telepítve.
Ez azt jelenti, hogy ahhoz sem kell előre telepítened a ys-t, hogy elkezdhesd!
Ha éppen egy the-great-exercise nevű feladaton dolgozol, akkor az exercism download --exercise=the-great-exercise --track=yamlscript létrehozza a
/path/to/exercism/yamlscript/the-great-exercise könyvtárat.
Ebben a könyvtárban a tesztfájl neve the-great-exercise-test.ys,
a megoldást tartalmazó programfájlé pedig the-great-exercise.ys lesz.
Emellett lesz egy README.md fájl a feladat leírásával, és egy
HELP.md fájl néhány hasznos információval arra az esetre, ha elakadnál.
A make-hez két fájl tartozik: a Makefile és a GNUmakefile.
Ez azért van, hogy biztosan a GNU make-et használd a tesztek futtatásához, és
ne valamilyen más make parancsot, ami esetleg telepítve van a gépedre.
A GNUmakefile az igazi, és a GNU make mindig ezt részesíti előnyben a
Makefile-lal szemben.
A többi make parancs a Makefile-t használja, amelynek hibát kell jeleznie egy
üzenettel, amely arra kér, hogy a GNU make-et használd!
A YAMLScript-tesztek természetesen YAMLScriptben íródnak! Mivel a YAMLScript YAML, a YAML pedig adat, a tesztek lényegében egyszerűen adatok.
Íme egy példa egy egyszerű tesztfájlra.
Valójában ez az acronym feladat első 3 tesztje. :-)
#!/usr/bin/env ys-0
use ys::taptest: :all
load: 'acronym.ys'
test::
- name: Basic
code: abbreviate('Portable Network Graphics')
want: PNG
- name: Lowercase words
code: abbreviate('Ruby on Rails')
want: ROR
- name: Punctuation
code: abbreviate('First In, First Out')
want: FIFO
done: 3
Az első sor egy shebang sor, amely megmondja a prove parancsnak (amelyet a
Makefile futtat), hogy a tesztek futtatásához a YAMLScript ys értelmezőjét
használja a perl helyett, ami a prove alapértelmezése.
A második sor egy use utasítás, amely betölti a YAMLScript ys::taptest
TAP tesztelési könyvtárát.
Megjegyzés: a TAP egy egyszerű, szövegalapú felület a tesztszkriptek és a tesztkeretek között, a
provepedig a szabványos keret a TAP-tesztek futtatására Perlben. Mivel a Perl mindenütt jelen van, a TAP és aprovehasználata végül kiváló választásnak bizonyul sok nyelv (köztük a YAMLScript) teszthalmazaihoz.
A use utasítás betölti az acronym.ys megoldásprogramot, hogy a tesztfájl azt
tesztelje.
Az összes tesztünk egy YAML-szekvenciában van a test kulcs alatt.
Az utolsó sor, a done: kötelező, és tudatja a tesztkerettel, hogy valóban
minden teszt lefutott.
A szám (ami elhagyható) a várt tesztek számát adja meg.
Minden teszt (a test kulcs alatt) egy leképezés, amely ezekből a
kulcs/érték párokból áll:
name: - a teszt címkéje, amelyet a prove -v ír ki.code: - a futtatandó YAMLScript-kód.
Ez a kód meghív valamilyen függvényt abban a megoldásprogramban, amelyen éppen
dolgozunk.what: - azoknál a teszteknél, amelyek hibát várnak, az érték error.
Normál teszteknél ez a pár nem szerepel.want: - a teszt várt eredménye.
Ez egy YAML-érték, és lehet string, szám, Boolean, szekvencia vagy leképezés.
Ha a what: értéke error, akkor ez az érték a várt hibaüzenet.SKIP: - állítsd true-ra, hogy kihagyd annak a tesztnek a futtatását.ONLY: - állítsd true-ra, hogy csak azt a tesztet futtasd.
Ha egynél több ONLY: jelölésű teszted van, mindegyik le fog futni.Ez minden, amit tudnod kell ahhoz, hogy tesztvezérelt fejlesztést folytass YAMLScriptben az Exercism-feladatoknál!
A ys::taptest könyvtárnak más funkciói is vannak, amelyekkel összetettebb
teszteket írhatsz, de az Exercism teszteket már megírták neked.
Ha többet szeretnél megtudni a ys::taptest könyvtárról, nézd meg a dokumentációt.