Tudj meg többet arról, hogyan használ a Clojure-kurzus tesztgenerátorokat a feladatok tesztjeinek előállításához
A Clojure-kurzus egy tesztgenerátort használ a gyakorlófeladatok tesztjeinek automatikus előállításához.
Ez azon alapul, hogy a problem-specifications repóban definiált feladatok többségéhez egy canonical-data.json fájl is tartozik, amely szabványosított tesztbemeneteket és -kimeneteket tartalmaz, és ezeket fel lehet használni a feladat megvalósításához.
Egy gyakorlófeladat tesztjeinek előállításához a tesztgenerátor a következőket teszi:
canonical-data.json fájljábóltests.toml fájl alapján kihagyja a kizárt teszteseteketcanonical-data.json fájl beolvasásaA tesztgenerátor a clojure/data.json könyvtár segítségével olvassa ki a teszteseteket a feladat canonical-data.json fájljából.
Mivel egyes kanonikus adatok egymásba ágyazást használnak, a beolvasott teszteset tartalmaz egy további path mezőt, amely a szülőelemek description tulajdonságait, valamint magának a tesztesetnek a saját description tulajdonságát tartalmazza.
Megjegyzés: a kulcsok kulcsszóként (keyword) értelmeződnek.
tests.toml fájlbólMinden feladathoz tartozik egy tests.toml fájl, amelyben az egyes tesztek kizárhatók/letilthatók.
A tesztgenerátor eltávolít minden olyan tesztesetet, amely kizártként van megjelölve (include = false).
Egyes feladatoknál az adatok renderelése előtt kisebb módosításokra lehet szükség. Előfordulhat például, hogy rövidebbé szeretnéd tenni a leírást.
A tesztesetek módosításához hozz létre egy .meta/generator.clj fájlt egy <slug>-generator névtérrel.
Kétféleképpen alakíthatod át a teszteseteket:
Az egyes tesztesetek frissítéséhez definiáld a következő függvényt:
(defn update-test-case
"Update a test case"
[test-case]
;; function body
)
Ez a példa a :path érték utolsó elemén kívül mindent eltávolít (ezzel lerövidítve a leírást):
(ns difference-of-squares-generator)
(defn update-test-case [test-case]
(update test-case :path #(take-last 1 %)))
A tesztesetek hozzáadásához vagy eltávolításához definiáld a következő függvényt:
(defn add-remove-test-cases
"Add/remove test case(s)"
[test-cases]
;; function body
)
Ha mindkét függvényt definiálod, először az add-remove-test-cases, másodszor pedig az update-test-case hívódik meg.
A (esetlegesen átalakított) tesztesetek ezután a .meta/generator.tpl fájlba kerülnek, amely meghatározza, hogyan renderelődjenek a tesztek ezen tesztesetek alapján.
A renderelt sablon ezután a cljfmt segítségével formázódik. Ennek a következő előnyei vannak:
Végül a renderelt sablon kimenete a feladat tesztfájljába íródik.
A sablonok a hbs könyvtár segítségével renderelődnek, amely támogatja a handlebars szintaxist (a handlebars.java használatával).
A tesztgenerátort kétféleképpen futtathatod:
bin/generate-tests: az összes olyan feladat tesztjeit előállítja, amelyhez tartozik generátorsablonbin/generate-tests <slug>: a megadott feladat tesztjeit állítja elő, ha van hozzá generátorsablon