Scopri come il track di Clojure usa i generatori di test per generare i test degli esercizi
Il track Clojure usa un generatore di test per generare automaticamente i test degli esercizi di pratica.
Sfrutta il fatto che la maggior parte degli esercizi definiti nel repo problem-specifications ha anche un file canonical-data.json, che contiene input e output di test standardizzati utilizzabili per implementare l'esercizio.
Per generare i test di un esercizio di pratica, il generatore di test:
canonical-data.json
tests.toml per omettere i casi di test esclusicanonical-data.json
Il generatore di test interpreta i casi di test dal file canonical-data.json dell'esercizio usando la libreria clojure/data.json.
Poiché alcuni dati canonici usano l'annidamento, il caso di test interpretato include un campo path aggiuntivo che contiene le proprietà description di eventuali elementi genitori, oltre alla proprietà description del caso di test stesso.
Nota: le chiavi vengono interpretate come keyword.
tests.toml
Ogni esercizio ha un file tests.toml, in cui i singoli test possono essere esclusi/disabilitati.
Il generatore di test rimuoverà tutti i casi di test contrassegnati come esclusi (include = false).
Alcuni esercizi potrebbero richiedere qualche ritocco prima di renderizzare i dati. Per esempio, potresti voler rendere la descrizione meno verbosa.
Per ritoccare i casi di test, definisci un file .meta/generator.clj con un namespace <slug>-generator.
Puoi trasformare i casi di test in due modi:
Per aggiornare singoli casi di test, definisci la seguente funzione:
(defn update-test-case
"Update a test case"
[test-case]
;; function body
)
Questo esempio rimuove tutti gli elementi tranne l'ultimo del valore :path (accorciando la descrizione):
(ns difference-of-squares-generator)
(defn update-test-case [test-case]
(update test-case :path #(take-last 1 %)))
Per aggiungere o rimuovere casi di test, definisci la seguente funzione:
(defn add-remove-test-cases
"Add/remove test case(s)"
[test-cases]
;; function body
)
Se definisci entrambe le funzioni, add-remove-test-cases viene chiamata per prima e update-test-case per seconda.
I casi di test (potenzialmente trasformati) vengono poi passati al file .meta/generator.tpl, che definisce come devono essere renderizzati i test in base a quei casi di test.
Il template renderizzato viene poi formattato usando cljfmt. Questo offre i seguenti vantaggi:
Infine, l'output del template renderizzato viene scritto nel file di test dell'esercizio.
I template vengono renderizzati usando la libreria hbs, che supporta la sintassi handlebars (tramite handlebars.java).
Il generatore di test può essere eseguito in due modi:
bin/generate-tests: genera i test per tutti gli esercizi che hanno un template del generatorebin/generate-tests <slug>: genera i test per l'esercizio specificato, se ha un template del generatore