java unit-testing testing clojure junit

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:

  1. Cree una función que genere una instancia de junit.framework.Test para cada método de prueba definido en clojure. Eche un vistazo a clojure.test/test-ns sobre cómo encontrar todos los métodos de prueba.
  2. Cree una instancia de junit.framework.TestSuite que agregue todas las pruebas generadas para un cierto ns y AOT compile esta clase de suite.
  3. 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.