java unit-testing junit junit4

java - ¿Es posible generar casos de prueba y suites de JUnit mediante programación?



unit-testing junit4 (4)

Tengo que escribir un conjunto de pruebas muy grande para un conjunto complejo de reglas de negocios que actualmente están capturadas en varias formas tabulares (por ejemplo, si los parámetros XYZ son tales y cuáles, el valor debe estar entre V1 y V2). Cada regla tiene un nombre y su propia semántica.

Mi objetivo final es tener una suite de prueba, organizada en suites de prueba secundarias, con un caso de prueba para cada regla.

Una opción es realmente codificar todas estas reglas como pruebas. Eso es feo, lento e inflexible.

Otra es escribir un script de Python que lea los archivos de reglas y genere clases de Java con las pruebas unitarias. Prefiero evitar esto si puedo. Otra variación sería usar Jython.

Idealmente, sin embargo, me gustaría tener un conjunto de pruebas que lea los archivos, y luego defina sub-suites y pruebas dentro de ellos. Cada una de estas pruebas puede iniciarse con ciertos valores tomados de los archivos de la tabla, ejecutar puntos de entrada fijos en nuestro sistema y luego llamar a alguna función de validación en los resultados según el valor esperado.

¿Hay una manera razonable de lograr esto usando solo Java?

Actualización: Puede que haya simplificado un poco nuestro tipo de reglas. Algunos de ellos son de hecho tabulares (estilo excel), otros son más difusos. Sin embargo, la pregunta general sigue siendo que probablemente no sea la primera persona en tener este problema.


¿Has considerado usar FIT para eso?

Parece que ya tienes las tablas listas y las "reglas de negocios" suenan como "la gente de negocios las escribe usando excel".

FIT es un sistema para verificar pruebas basadas en tablas con entradas -> asignaciones de salida esperadas, y está disponible una biblioteca java de código abierto para ejecutar esas pruebas.


Dentro de JUnit 4 querrás mirar el corredor parametrizado . Fue creado para el propósito que usted describe (pruebas basadas en datos). Sin embargo, no los organizará en suites.

En Junit 3 puedes crear TestSuites y Pruebas programáticamente. La respuesta está en Junit Recipes , que puedo ampliar si lo necesita (recuerde que JUnit 4 puede ejecutar pruebas de Junit 3).


Escribí algo muy similar usando JUnit. Tuve un gran número de casos de prueba (30 páginas) en un archivo XML. En lugar de intentar generar diferentes pruebas, lo hice todo en una sola prueba, que funcionó bien.

Mi prueba se veía algo como esto:

void setup() { cases = read in the xml file } void test_fn_works() { for case in cases { assert(case.expected_result, fn(case.inputs), ''Case '' + case.inputs + '' should yield '' + case.expected_result); } }

Con Ruby, hice exactamente lo que estás diciendo: generar pruebas sobre la marcha. Sin embargo, hacer esto en Java es complejo, y no creo que valga la pena, ya que hay otro enfoque bastante razonable.

Espero que esto ayude.


Intentamos FIT y decidimos ir con Concordion . Las principales ventajas de esta biblioteca son:

  • Las pruebas se pueden registrar junto con el código base (en un repositorio de Subversion, por ejemplo)
  • Son ejecutados por un corredor estándar de JUnit.