Tesztelés a YAMLScript kurzuson

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!

Egy feladatkönyvtár felépítése

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!

Egy tesztfájl anatómiája

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 prove pedig a szabványos keret a TAP-tesztek futtatására Perlben. Mivel a Perl mindenütt jelen van, a TAP és a prove haszná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.