java - tutorial - ¿Cómo lidiar con los datos de prueba en Junit?
pruebas unitarias (5)
En el proceso de desarrollo TDD (Desarrollo dirigido por prueba), ¿cómo tratar con los datos de prueba? Suponiendo que un escenario, analizar un archivo de registro para obtener la columna necesaria. Para una prueba sólida, ¿cómo preparo los datos de prueba? ¿Y es correcto para mí ubicar esos archivos en los archivos de la clase de prueba?
Cuando los datos de mi prueba deben ser un archivo externo, una situación que trato de evitar, pero no siempre, la pongo en un directorio de datos de prueba reservados al mismo nivel que mi proyecto, y uso getClass().getClassLoader().getResourceAsStream(path)
para leerlo. El directorio de datos de prueba no es un requisito, solo una conveniencia. Pero trate de evitar la necesidad de hacer esto; como señala @philippe, casi siempre es mejor tener los valores codificados en las pruebas, justo donde se pueden ver.
Los codifica en las pruebas para que estén cerca de las pruebas que los usan, lo que hace que la prueba sea más legible.
Cree los datos de prueba de un archivo de registro real. Escriba una lista de las pruebas que se pretenden escribir, acéptelas una por una y márquelas una vez que pasen.
Maven, por ejemplo, usa una convención para estructuras de carpetas que se encarga de los datos de prueba:
src
main
java <-- java source files of main application
resources <-- resource files for application (logger config, etc)
test
java <-- test suites and classes
resources <-- additional resources for testing
Si usa maven para compilar, querrá colocar los recursos de prueba en la carpeta correcta, si su construcción tiene algo diferente, es posible que desee utilizar esta estructura, ya que es más que una convención convencional, en mi opinión está cerca para ''practicar mejor''.
Otra opción es burlarse de sus datos, eliminando cualquier dependencia de fuentes externas. De esta forma, es fácil probar varias condiciones de datos sin tener que tener múltiples instancias de datos de prueba externos. Luego, generalmente utilizo pruebas completas de integración para pruebas de humo livianas.
getClass().getClassLoader().getResourceAsStream("....xml");
dentro de la prueba funcionó para mí. Pero
getClass().getResourceAsStream("....xml");
no funcionó No sé por qué, pero tal vez ayuda a otros.