Сделайте "медленный" набор тестов с помощью clojure.test

Я хочу, чтобы этот тест выполнялся с каждым lein test:

(ns acker.core-test
  (:require [clojure.test :refer :all]
            [acker.core :refer :all]))

(deftest ackermann-test
  (testing "ack-1, ack-2, ack-3"
    (are [m n e]
         (= (ack-1 m n) (ack-2 m n) (ack-3 m n) e)
         0 0  1
         0 1  2
         0 2  3
         1 0  2
         1 1  3
         1 2  4
         2 0  3
         2 1  5
         2 2  7
         3 0  5
         3 1 13
         3 2 29)))

Я хочу, чтобы ackermann-slow-test запускался только тогда, когда я его просил:

(deftest ackermann-slow-test
  (testing "ackermann (slow)"
    (are [m n e] (= (ack-3 m n) e)
         3 3     61
         3 4    125
         4 0     13
         4 1  65533)))

Полный код доступен в Github: https://github.com/bluemont/ackermann

Ответ 1

В соответствии с созданием Leiningen для вас Филом Хагельбергом, функция test-selectors была добавлена ​​в Leiningen в версии 1.4.

Два простых шага. Сначала добавьте это к project.clj:

:test-selectors {:default (complement :slow)
                 :slow :slow
                 :all (constantly true)}

Во-вторых, отметьте свой тест метаданными:

(deftest ^:slow ackermann-slow-test
  (testing "ackermann (slow)"
    (are [m n e] (= (ack-3 m n) e)
         3 3     61
         3 4    125
         4 0     13
         4 1  65533)))

Теперь у вас есть три варианта запуска тестов:

⚡ lein test
⚡ lein test :slow
⚡ lein test :all

Кроме того, эту информацию легко найти с помощью lein test -h:

Запустите тесты проекта.

Маркировка deftest или ns форм с помощью метаданных позволяет вам выбирать селектор для указания подмножества вашего тестового набора для запуска:

(deftest ^:integration network-heavy-test
  (is (= [1 2 3] (:numbers (network-operation)))))

Записать селекторов в project.clj:

:test-selectors {:default (complement :integration)
                 :integration :integration
                 :all (constantly true)}

Аргументы для этой задачи будут считаться тестовыми селекторами, если они ключевые слова, в противном случае аргументы должны быть тестовыми пространствами имен или файлами для запуска. Без аргументов используется: селектор теста по умолчанию, если он присутствует, в противном случае все тесты выполняются. Аргументы тестового селектора должны появиться после список пространств имен.

По умолчанию: для запуска выборочных тестов доступен только тестовый селектор. Для пример, lein test :only leiningen.test.test/test-default-selectorвыполняется только указанный тест. По умолчанию: весь тестовый селектор доступный для запуска всех тестов.

Аргументы: ([& тесты])