testing - unitaria - Ejecute una prueba de Clojure(no todas las pruebas en un espacio de nombres), con dispositivos, desde el REPL
testing en java (4)
¿Cómo ejecuto una prueba (no un espacio de nombres completo) desde Clojure REPL?
He intentado llamar a la función directamente, por ejemplo (the-ns/the-test)
pero necesito los dispositivos para ejecutar primero. Así que quiero encontrar una manera de comenzar las pruebas desde clojure.test
.
Esto está cerca pero no coincide con lo que quiero hacer: https://stackoverflow.com/a/24337705/109618
No veo ninguna mención de cómo hacerlo desde la API clojure.test .
Hubo una nueva función agregada en Clojure 1.6 para apoyar esto. clojure.test/test-vars ejecutará uno o más vars de prueba con accesorios.
Creo que algo como esto debería funcionar:
(clojure.test/test-vars [#''the-ns/the-test])
Para ejecutar una única prueba en un espacio de nombres:
lein test :only namespace_name/testname
Para ejecutar todas las pruebas en un espacio de nombres
lein test :only namespace_name
Si no le importa no ejecutar dispositivos, puede hacer lo siguiente antes de run-tests
:
(defn test-ns-hook []
(my-test))
Para quitar el gancho, puedes hacer
(ns-unmap *ns* ''test-ns-hook)
Si aún necesita sus dispositivos y desea quedarse con un espacio de nombres de prueba, puede agregar un ns-unmap
para eliminar todas las pruebas / dispositivos que no desea ejecutar desde el espacio de nombres antes de ejecutar sus pruebas modeladas en algo como:
(doseq [v (keys (ns-publics ''my-ns))]
(let [vs (str v)]
(if (.startsWith vs "test-") (ns-unmap ''my-ns v))))
Podría ser más fácil trabajar con múltiples espacios de nombres, uno de los cuales contiene todas sus pruebas y dispositivos y en otros espacios de nombres se refer
a las pruebas y dispositivos que desea ejecutar desde su espacio de nombres de prueba principal. Luego, puede usar ns
para cambiar a un espacio de nombres de prueba específico o pasar run-tests
los espacios de nombre que desea probar:
(ns test-main
(:require [clojure.test :refer :all]))
(deftest addition
(is (= 4 (+ 2 2)))
(is (= 7 (+ 3 4))))
(deftest subtraction
(is (= 1 (- 4 3)))
(is (= 3 (- 7 4))))
(run-tests)
;Runs all the tests
(ns test-specific
(:require [clojure.test :refer :all]
[test-main :refer :all]))
(deftest arithmetic
(subtraction))
(run-tests)
;Just runs the tests you want
Una buena alternativa a clojure.test (si está bien agregar dependencias adicionales es eftest
). Esta biblioteca es un corredor alternativo (es compatible con clojure.test). Tiene selectores de pruebas flexibles (es decir, por carpeta, por espacio de nombres, por var).
En un REPL, puedes ejecutar algo como esto:
(require ''[eftest.runner :refer [find-tests run-tests]]) (run-tests (find-tests #''foo.bar/baz))