2011-01-30 20 views
14

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.Pruebas unitarias de JUnit y Clojure

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 sus amigos.

¿Hay alguna manera de ajustar estas pruebas de Clojure en una especie de envoltorio para que puedan llamarse automáticamente desde JUnit?

(cuando digo de forma automática, quiero decir, sin recurrir a la solución de escribir manual de un caso de prueba JUnit para envolver y llamar a cada caso de prueba Clojure individual :-))

+2

probablemente me inclino hacia experta en Leiningen –

+2

puede fácilmente experta en la configuración de este .. comenzar con [esto] (http://stackoverflow.com/questions/2574649/testing-clojure-in-maven) pregunta.. – Nevena

Respuesta

3

La cosa más fácil de hacer sería llamar 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 valor de metadatos :test. Ese valor es su función de prueba.

Líneas 661-686 de test.clj dan una buena sinopsis de cómo se almacenan las pruebas y luego se ejecutan en Clojure.

2

Actualmente no conozco ninguna integración de JUnit que conozca. Además de llamar a run-all-tests de una sola prueba unitaria según lo sugerido por @psyllo usted puede construir una integración más profunda de la siguiente manera:

  1. Construir una función que genera una instancia de junit.framework.Test para cada método de ensayo definido en clojure. Eche un vistazo a clojure.test/test-ns sobre cómo encontrar todos los métodos de prueba.
  2. Crea una instancia de junit.framework.TestSuite que agrega todas las pruebas generadas para un cierto ns y AOT compila esta clase de suite.
  3. Puede llamar a la clase suite desde java/junit.