Тест Clojure с несколькими утверждениями и отчетами - PullRequest
0 голосов
/ 25 сентября 2018

Я сталкиваюсь с некоторыми проблемами при составлении отчетов о сбоях с использованием инфраструктуры тестирования clojure.test.

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

Моя проблема заключается в следующем ... когда я объявляю deftest, как в этом примере:

(deftest test1 (is (= 1 1) (is (= 2 1))

Этот тест запустится, и если я сделаю что-то вроде (run-tests) или (test-var #'test1) он вернет ноль, но напечатает сбоев.

Я решил переопределить метод: fail для создания отчетов, потому что мне нужна картаиз сбоев, подобных этому: {"expected" (:expected m), "actual" (:actual m)}, и это своего рода работает, если бы я просто использовал функцию отчетности.

Проблема в том, что при запуске тестов через платформу Clojure.test есть много макросов, которые получаютвызвал, и он не ведет себя точно так, как я хочу.

Моя конечная цель: запустить тесты и, если есть какие-либо сбои, вместо их печати, сохранить их на карту и вернуть картумне.Если они все пройдут, мне все равно, что мне вернется.

Возможно ли это?Я не хочу прекращать тестирование, если какой-то тест не пройден, я просто хочу, чтобы он где-то был записан, предпочтительно карта.


Источники:

Тест Clojure смножественные утверждения

https://clojure.github.io/clojure/branch-1.1.x/clojure.test-api.html

https://groups.google.com/forum/#!topic/clojure/vCjso96wqps

1 Ответ

0 голосов
/ 26 сентября 2018

Боюсь, нет простого способа сделать это.Вы можете предоставить пользовательскую реализацию clojure.test/report :fail defmethod и сохранить результат в атоме, но трудно распространить результат на внешние слои.

Если вы просто используете test-var, тогда это выполнимо, но обратите внимание, что тестовые приборыв этом случае не выполняются - см. test-vars source :

(:use clojure.test)

(deftest failing
  (testing "fail me"
    (is (= 1 0))
    (is (= 2 1))
    (is (= 3 2))))

(def test-failures (atom []))

(defmethod report :fail [m]
  (swap! test-failures
         (fn [previous-failures current-failure]
           (conj previous-failures current-failure))
         {:test-var-str (testing-vars-str m)
          :expected (:expected m)
          :actual (:actual m)}))

(defmethod report :end-test-var [m]
  @test-failures)

(defn run-test-var [v]
  (reset! test-failures [])
  (test-var v))

;; in REPL:
(run-test-var #'failing)
;; =>
[{:test-var-str "(failing) (form-init4939336553149581727.clj:159)", :expected 1, :actual (0)}
 {:test-var-str "(failing) (form-init4939336553149581727.clj:160)", :expected 2, :actual (1)}
 {:test-var-str "(failing) (form-init4939336553149581727.clj:161)", :expected 3, :actual (2)}]

Там также defmethod report :end-test-ns, но этот не очень полезен, потому что test-ns function возвращает @*report-counters*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...