Pregunta

¿Qué utiliza para escribir pruebas basadas en datos en jUnit?

(Mi definición de) una prueba basada en datos es una prueba que lee datos de alguna fuente externa (archivo, base de datos, ...), ejecuta una prueba por línea / archivo / lo que sea, y muestra los resultados en una prueba corredor como si tuviera pruebas separadas: el resultado de cada ejecución se muestra por separado, no en un gran agregado.

¿Fue útil?

Solución

En JUnit4 puede usar el Parametrizado testrunner para hacer datos pruebas.

No está terriblemente bien documentado, pero la idea básica es crear un método estático (anotado con @Parameters ) que devuelve una Colección de matrices de objetos. Cada una de estas matrices se utiliza como argumento para el constructor de la clase de prueba, y luego los métodos de prueba habituales se pueden ejecutar utilizando los campos establecidos en el constructor.

Puede escribir código para leer y analizar un archivo de texto externo en el método @Parameters (u obtener datos de otra fuente externa), y luego podrá agregar nuevas pruebas editando este archivo sin volver a compilar las pruebas.

Otros consejos

Aquí es donde TestNG, con su @DataSource, brilla. Esa es una razón por la que lo prefiero a JUnit; los otros son dependencias y pruebas de hilos paralelos.

Utilizo una base de datos en memoria, como hsqldb para poder rellenar previamente la base de datos con un " ; estilo de producción " conjunto de datos o puedo comenzar con una base de datos hsqldb vacía y llenarla con filas que necesito para realizar mis pruebas. Además de eso, escribiré mis pruebas usando JUnit y Mockito .

Utilizo la combinación de dbUnit , jMock y jUnit 4. Luego puede ejecutarlo como suite o por separado

Es mejor extender TestCase con un " DataDrivenTestCase " que se adapte a tus necesidades Aquí está el ejemplo de trabajo: http://mrlalonde.blogspot.ca/2012/08 /data-driven-tests-with-junit.html

A diferencia de las pruebas parametrizadas, permite casos de prueba bien nombrados.

Estoy con @ DroidIn.net, eso es exactamente lo que estoy haciendo, sin embargo, para responder a su pregunta literalmente "y muestra los resultados en un corredor de prueba como si tuviera pruebas separadas". tienes que mirar el corredor parametrizado JUnit4. DBUnit no hace eso. Si tiene que hacer mucho de esto, honestamente TestNG es más flexible, pero absolutamente puede hacerlo en JUnit.

También puede ver el corredor de Teorías JUnit, pero recuerdo que no es bueno para los conjuntos de datos basados ??en datos, lo cual tiene sentido porque JUnit no se trata de trabajar con grandes cantidades de datos externos.

Aunque este es un tema bastante antiguo, todavía pensaba en contribuir con mi parte. Siento que el soporte de JUnit para las pruebas basadas en datos es menos y demasiado hostil. por ej. para usar parametrizado, necesitamos escribir nuestro constructor. Con Theories runner no tenemos control sobre el conjunto de datos de prueba que se pasan al método de prueba.

Hay más inconvenientes identificados en esta serie de publicaciones de blog: http://www.kumaranuj.com/2012/08/junits-parameterized-runner-and-data.html

Ahora hay una solución integral que se presenta bastante bien en forma de EasyTest, que es un marco extendido fuera de JUnit y está destinado a dar mucha funcionalidad a sus usuarios. Su objetivo principal es realizar pruebas controladas por datos utilizando JUnit, aunque ya no es necesario que dependa de JUnit. Aquí está el proyecto github para referencia: https://github.com/anujgandharv/easytest

Si alguien está interesado en contribuir con sus pensamientos / código / sugerencias, entonces este es el momento. Simplemente puede ir al repositorio de github y crear problemas.

Normalmente, las pruebas basadas en datos utilizan un pequeño componente comprobable para manejar los datos. (Objeto de lectura de archivo u objetos simulados) Para bases de datos y recursos fuera de la aplicación, los simulacros se utilizan para simular otros sistemas. (Servicios web, bases de datos, etc.). Por lo general, veo que hay archivos de datos externos que manejan los datos y la salida. De esta manera, el archivo de datos se puede agregar al VCS.

Actualmente tenemos un archivo de accesorios con nuestros números de identificación. Esto es terriblemente frágil, pero es fácil hacer que algo funcione. Nuestro plan es inicialmente tener estos números de identificación reemplazables por propiedades -D en nuestras construcciones de hormigas.

Nuestro entorno utiliza una base de datos heredada con datos horriblemente entrelazados que no se pueden cargar antes de una ejecución (por ejemplo, por dbUnit). Eventualmente, nos gustaría llegar a donde una prueba unitaria consultaría la base de datos para encontrar una ID con la propiedad bajo prueba, luego usar esa ID en la prueba unitaria. Sería lento y se llamaría más apropiadamente prueba de integración, no `` prueba unitaria '', pero estaríamos probando contra datos reales para evitar la situación en la que nuestra aplicación funciona perfectamente contra datos de prueba pero falla con datos reales.

Algunas pruebas se prestan a la interfaz.

Si las lecturas de la base de datos / archivo se recuperan mediante una llamada de interfaz, simplemente obtenga su prueba de unidad para implementar la interfaz y la clase de prueba de unidad puede devolver los datos que desee.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top