了解 Clojure track 如何使用測試產生器為練習產生測試
Clojure 軌道使用測試產生器來自動產生練習的測試。
它利用了一個事實:大部分定義在 problem-specifications 儲存庫的練習也有canonical-data.json檔案,其中包含標準化的測試輸入與輸出,可用來實作該練習。
如要產生練習的測試,測試產生器會:
canonical-data.json檔案讀取該練習的測試案例tests.toml檔案略過已排除的測試案例canonical-data.json檔案測試產生器會使用 clojure/data.json 程式庫解析練習的canonical-data.json中的測試案例。
由於某些標準資料使用巢狀結構,解析後的測試案例會包含額外的path欄位,其中含有任何父元素的description屬性,以及測試案例本身的description屬性。
注意:鍵會解析為關鍵字。
tests.toml檔案略過已排除的測試每個練習都有一個tests.toml檔案,可在其中排除/停用個別測試。
測試產生器會移除任何標記為已排除的測試案例(include = false)。
有些練習在渲染資料前可能需要一些調整。 例如,你可能想讓描述不要那麼冗長。
如要調整測試案例,請定義一個帶有<slug>-generator命名空間的.meta/generator.clj檔案。
你可以用兩種方式轉換測試案例:
如要更新個別測試案例,請定義下列函式:
(defn update-test-case
"Update a test case"
[test-case]
;; function body
)
這個範例會移除:path值中除了最後一個元素以外的所有元素(縮短描述):
(ns difference-of-squares-generator)
(defn update-test-case [test-case]
(update test-case :path #(take-last 1 %)))
如要新增或移除測試案例,請定義下列函式:
(defn add-remove-test-cases
"Add/remove test case(s)"
[test-cases]
;; function body
)
如果你同時定義了這兩個函式,會先呼叫add-remove-test-cases,再呼叫update-test-case。
接著會將(可能已轉換的)測試案例傳給.meta/generator.tpl檔案,這個檔案會定義如何根據這些測試案例渲染測試。
接著會使用 cljfmt 格式化渲染後的範本。 這有下列好處:
最後,渲染後的範本輸出會寫入練習的測試檔案。
範本會使用 hbs 程式庫渲染,它支援 handlebars 語法(使用 handlebars.java)。
測試產生器有兩種執行方式:
bin/generate-tests:為所有具有產生器範本的練習產生測試bin/generate-tests <slug>:為指定的練習產生測試,前提是該練習具有產生器範本