Как мне ожидать сбой в модульном тесте? - PullRequest
10 голосов
/ 21 октября 2011

Мы пишем модульные тесты для нашего кода в Clojure, используя clojure.test .

Некоторые из наших тестов игнорируют API и намеренно нарушают код, чтобы служить документацией для скрытых недостатков в коде.

Однако мы хотим различать сбои этих тестов и сбои обычных тестов.

Мы не видели никаких предложений в документации clojure.test - только (is (thrown? ...)), которая, конечно, не делает то, что нам нужно.

Есть предложения? По сути, мы ищем что-то вроде (is (not <condition>)), за исключением того, что тестовая среда должна записывать ожидаемый сбой - что-то вроде this .

Ответы [ 4 ]

3 голосов
/ 18 сентября 2013

Как сказал @andy, можно перепривязать функцию report.

(defmacro should-fail [body]
  `(let [report-type# (atom nil)]
     (binding [clojure.test/report #(reset! report-type# (:type %))]
       ~body)
     (testing "should fail"
       (is (= @report-type# :fail )))))

И используйте этот макрос так:

(should-fail (is (= 1 2)))

Это будет успешное прохождение теста.

3 голосов
/ 22 октября 2011

Я заставил тесты выдавать исключение, когда они «провалились», как это, а затем использовал thrown?, чтобы проверить, приходит ли исключение, как ожидалось.Там очень хорошо может существовать более элегантный способ, но это делает работу.

0 голосов
/ 15 августа 2012

Немного опоздал на вечеринку, я знаю, но если вы используете Leiningen, вы можете использовать тестовые селекторы, чтобы исключить ожидаемые сбои из "нормальной" сборки. В вашем проекте .clj:

:test-selectors {:default #(not :expected-failure %)
                 :expected-failure :expected-failure}

Затем напишите свой тест как:

(deftest ^:expected-failure test-with-expected-failure ...)

Вызов lein test запустит только те тесты без метаданных: ожидаемый сбой. Звонок lein test :expected-failure запустит ожидаемые тесты на отказ. Возможно, не совсем то, на что вы надеялись, но ИМХО лучше, чем использовать thrown? повсюду. По крайней мере, таким образом, ожидаемые сбои явно документированы в коде и не будут мешать сборке.

0 голосов
/ 04 марта 2012

Перепривязать функцию отчета, как описано в clojure.test. Оттуда вы можете изменить способ обработки и сообщения о сбое.

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