Дізнайтеся, як трек Clojure використовує генератори тестів для створення тестів до вправ
Трек Clojure використовує генератор тестів, щоб автоматично генерувати тести практичних вправ.
Він спирається на те, що більшість вправ, визначених у репозиторії problem-specifications, також мають файл canonical-data.json, який містить стандартизовані вхідні та вихідні дані тестів, що їх можна використати для реалізації вправи.
Щоб згенерувати тести практичної вправи, генератор тестів:
canonical-data.json
tests.toml, щоб пропустити виключені тестові випадкиcanonical-data.json
Генератор тестів розбирає тестові випадки з файлу canonical-data.json вправи за допомогою бібліотеки clojure/data.json.
Оскільки деякі канонічні дані мають вкладену структуру, розібраний тестовий випадок містить додаткове поле path з властивостями description усіх батьківських елементів, а також власну властивість description тестового випадку.
Зауваження: ключі розбираються як ключові слова.
tests.toml
Кожна вправа має файл tests.toml, у якому окремі тести можна виключити/вимкнути.
Генератор тестів прибирає всі тестові випадки, позначені як виключені (include = false).
Деяким вправам перед рендерингом даних можуть знадобитися невеликі правки. Наприклад, нам може знадобитися зробити опис менш докладним.
Щоб підправити тестові випадки, створіть файл .meta/generator.clj із простором імен <slug>-generator.
Перетворювати тестові випадки можна двома способами:
Щоб оновити окремі тестові випадки, створіть таку функцію:
(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>: згенерувати тести для вказаної вправи, якщо вона має шаблон генератора