Ismerkedj meg a tesztgenerátorokkal

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.

Lépések

Egy gyakorlófeladat tesztjeinek előállításához a tesztgenerátor a következőket teszi:

  1. Beolvassa a feladat teszteseteit a canonical-data.json fájljából
  2. A tests.toml fájl alapján kihagyja a kizárt teszteseteket
  3. Átalakítja a teszteseteket (opcionális)
  4. A feladat generátorsablonjával rendereli a teszteseteket
  5. A renderelt sablont a cljfmt segítségével formázza
  6. Kiírja a formázott sablont a feladat tesztfájljába

1. lépés: a canonical-data.json fájl beolvasása

A 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.

2. lépés: a kizárt tesztek kihagyása a tests.toml fájlból

Minden 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).

3. lépés: a tesztesetek átalakítása (opcionális)

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:

  • Teszteset(ek) frissítése
  • Teszteset(ek) hozzáadása/eltávolítása

Teszteset(ek) frissítése

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
)
Példa

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 %)))

Teszteset(ek) hozzáadása vagy eltávolítása

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
)
Note

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.

4. lépés: a tesztesetek renderelése

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.

5. lépés: a renderelt sablon formázása a cljfmt segítségével

A renderelt sablon ezután a cljfmt segítségével formázódik. Ennek a következő előnyei vannak:

  • A feladatok egységesen formázottak lesznek
  • Nem kell sokat törődnöd a szóközökkel és az igazítással a sablonok írásakor

6. lépés: a renderelt sablon kiírása a feladat tesztfájljába

Végül a renderelt sablon kimenete a feladat tesztfájljába íródik.

Sablonok

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).

Parancssori felület

A tesztgenerátort kétféleképpen futtathatod:

  1. bin/generate-tests: az összes olyan feladat tesztjeit előállítja, amelyhez tartozik generátorsablon
  2. bin/generate-tests <slug>: a megadott feladat tesztjeit állítja elő, ha van hozzá generátorsablon