2009-10-29 5 views
16

Tengo que escribir un conjunto de pruebas muy grande para un conjunto complejo de reglas comerciales que actualmente se capturan en varias formas tabulares (por ejemplo, si los parámetros X Y Z son tales, el valor debe ser entre V1 y V2). Cada regla tiene un nombre y su propia semántica.¿Es posible generar programas y suites de prueba JUnit mediante programación?

Mi objetivo final es tener un conjunto de pruebas, organizado en sub suites de prueba, con un caso de prueba para cada regla.

Una opción es codificar realmente todas estas reglas como pruebas. Eso es feo, lento y poco flexible.

Otra es escribir un script Python que lea los archivos de reglas y genere clases 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 definir sub-suites y pruebas dentro de ellos. Cada una de estas pruebas se puede inicializar con ciertos valores tomados de los archivos de tabla, ejecutar puntos de entrada fijos en nuestro sistema y luego llamar a alguna función de validación en los resultados en función del valor esperado.

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

Actualización: Es posible que haya simplificado algo nuestro tipo de reglas. Algunos de ellos son tabulares (estilo Excel), otros son más borrosos. La pregunta general sigue siendo, ya que probablemente no soy la primera persona en tener este problema.

+0

Muy interesado en conocer esto; Necesito aprender más sobre casos de prueba. – I82Much

Respuesta

17

Dentro de JUnit 4 querrá mirar el Parameterized runner. Fue creado para el propósito que describes (pruebas basadas en datos). Sin embargo, no los organizará en suites.

En Junit 3 puede crear TestSuites and Test programtically. La respuesta está en Junit Recipes, que puedo ampliar si lo necesita (recuerde que JUnit 4 puede ejecutar pruebas de Junit 3).

8

¿Ha considerado usar FIT para eso?

Parece que ya tiene las tablas listas, y las "reglas comerciales" suenan como "las personas de negocios las escriben usando Excel".

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

+0

También hay controladores de Java para ello. –

+0

Eso es lo que iba a decir; su caso suena exactamente como el tipo de ajuste que debía resolver; Recomiendo fitnesse (http://fitnesse.org) ya que es la implementación más actualizada y actual que puedo pensar. – Kevlar

+0

Gracias. Estoy familiarizado con FIT pero no estaba familiarizado con las nuevas implementaciones; Los veré. Aún así, me pregunto si hay una manera programática de permanecer dentro de JUnit. – Uri

1

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

  • las pruebas se pueden comprobar en lado de la base de código (en un repositorio Subversion, por ejemplo)
  • que son ejecutados por un corredor JUnit estándar
0

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

Mi prueba parecí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 son pruebas de generación diciendo-- sobre la marcha.Hacer esto en Java, sin embargo, es complejo, y no creo que valga la pena ya que hay otro enfoque bastante razonable.

Espero que esto ayude.

Cuestiones relacionadas