2015-03-21 3 views
2

Я использую deftest определить несколько модульных тестов (тесты генерируются макросом, поэтому идентификаторы полностью квалифицированы):Как получить список модульных тестов в clojure?

(clojure.test/deftest 
     init-globals-test 
     (clojure.test/is (clojure.core/= 40 casc-gen-org.dev/*board-width*)) 
     (clojure.test/is (clojure.core/= 40 casc-gen-org.dev/*board-height*))) 

Однако, когда я запускаю тесты:

(run-tests) 

я получаю следующее:

: #'casc-gen-org.dev/clj-run-runtime-uts{:type :summary, :fail 0, :error 0, :pass 6, :test 3} 

Он говорит, что я 3 испытания и 6 утверждений (при условии, что я читаю это право), но я только ожидал 1 тест и 2 asserti дополнения. Я предполагаю, что у меня есть некоторые устаревшие тесты в моем repl somwhere, и я бы хотел их удалить.

Я просмотрел документ для deftest (https://clojure.github.io/clojure/clojure.test-api.html) и не вижу ничего, связанного с листинговыми испытаниями.

Как я могу перечислять тесты, которые в настоящее время определены?

+1

Что clojure.test делает это проходит через каждый определенный нс с 'все-ns', а затем проходит через каждый var в каждом ns с помощью 'ns-interns', запустив в метаданных ключ': test'. Там может быть и не быть более элегантный способ справиться с этим. – noisesmith

+0

По крайней мере теперь я знаю, что это не что-то тривиальное, поэтому я перестану пытаться искать простую команду. Кажется довольно удивительным, что нет никакого простого способа сделать это, хотя. – vt5491

+1

'(- >> (all-ns) (map ns-publics) (mapcat vals) (фильтр (comp: test meta)))' работает, стоит ли выдать ответ? – noisesmith

ответ

1

clojure.test выполняет поиск вручную/фильтр для поиска варов с метаданными :test, и все найденные с этим ключом метаданные считаются испытаниями. Мы можем сделать то же самое, и список ВАРА, которые будут рассматриваться модульными тестами с малой функцией без аргументов:

#(->> (all-ns) 
     (mapcat (comp vals ns-interns)) 
     (filter (comp :test meta))) 
Смежные вопросы