java - Pruebas unitarias JUnit y Clojure
unit-testing testing (2)
Estoy creando una biblioteca que incluye código tanto Clojure como Java, y me gustaría poder ejecutar una única suite JUnit de prueba en toda la base de códigos. Parece que esto debería ser posible ya que ambos se están ejecutando en la JVM y existe una buena interoperabilidad Clojure / Java.
Sin embargo, actualmente el código Clojure parece favorecer las pruebas unitarias realizadas a través de la API clojure.test usando "(run-all-tests)" y amigos.
¿Hay una buena manera de ajustar estas pruebas de Clojure en una especie de envoltorio para que puedan llamarse automáticamente desde JUnit?
(cuando digo automáticamente, me refiero sin recurrir a la solución manual de escribir un caso de prueba JUnit para envolver y llamar cada caso de prueba Clojure individualmente :-))
Actualmente no hay integración JUnit que yo sepa. Además de invocar pruebas run-all de una única prueba JUnit como lo sugiere @psyllo, puedes construir una integración más completa de la siguiente manera:
- Cree una función que genere una instancia de
junit.framework.Test
para cada método de prueba definido en clojure. Eche un vistazo aclojure.test/test-ns
sobre cómo encontrar todos los métodos de prueba. - Cree una instancia de
junit.framework.TestSuite
que agregue todas las pruebas generadas para un cierto ns y AOT compile esta clase de suite. - Puede llamar a la clase suite desde java / junit.
Lo más fácil sería llamar a run-all-tests
desde una única prueba JUnit. Puede capturar la salida y mirar la última línea que indica el recuento de pasar / reprobar / error. Si ve un error o un error, puede hacer que la prueba JUnit falle.
Sin embargo, si desea interactuar con cada prueba de Clojure, deberá implementar una funcionalidad similar a la que se encuentra en clojure.test. Es decir, para cada valor en cada espacio de nombres, busque una función almacenada en el :test
valor de metadato de :test
. Ese valor es su función de prueba.
Las líneas 661-686 de test.clj dan una buena sinopsis de cómo se almacenan las pruebas y luego se ejecutan en Clojure.