2010-09-15 19 views
17

Quiero implementar JUnit en un pequeño proyecto en el que estoy trabajando porque quiero aprender un poco al respecto.¿Cómo puedo comparar archivos en un caso de prueba JUnit?

Los tutoriales que leo todos hacen referencia a los métodos que tienen un resultado particular.

En mi caso mi salida son archivos, ¿cómo puedo hacer esto? un simple ejemplo? cualquier enfoque que podría ayudarme con esto?

Los archivos son archivos de texto sin formato que se compilan mediante un método privado anulado.

+0

¿Cómo los métodos escribir en el fichero? Si obtienen una transmisión, puede darles la suya en lugar de una que apunte a un archivo y luego compararlo. –

+0

Con una cadena de búfer de escritura básica dentro de un rastreador web (presiono enter, pero escribió el mensaje), el código es algo así como: txtUrlSpecial.write (bigText.charAt (j)); – Saikios

Respuesta

16

Desea obtener un archivo de salida correcto para un conjunto determinado de entradas, y configurar una prueba para llamar a su método nulo con esas entradas, y luego comparar su archivo de salida validado con lo producido por su método. Debes asegurarte de que tienes alguna manera de especificar a dónde saldrá tu método, de lo contrario tu prueba será muy frágil.

@Rule 
public TemporaryFolder folder = new TemporaryFolder(); 

@Test 
public void testXYZ() { 
    final File expected = new File("xyz.txt"); 
    final File output = folder.newFile("xyz.txt"); 
    TestClass.xyz(output); 
    Assert.assertEquals(FileUtils.readLines(expected), FileUtils.readLines(output)); 
} 

Usos commons-io FileUtils para el texto conveniencia de comparación de archivos & JUnit de TemporaryFolder para asegurar el archivo de salida no existe antes de las pruebas de funcionamiento.

+0

Me gusta esto, pero ¿por qué nadie vota por tu respuesta? : S – Saikios

+2

Siempre puedes votar por ti mismo –

+0

eclipse dice que org.junit.internal.runners.TestClass está en desuso = ( – Saikios

2

Después de sus métodos, escriba el archivo, en la prueba de unidad puede leer el archivo y verificar si está escrito correctamente.

Otra cosa que tiene sentido es dividir sus métodos en uno que recupere esos datos y los devuelva a los métodos que simplemente lo escriben en un archivo. Luego puede verificar si los datos devueltos por el primer método están bien.

Y otro enfoque plausible sería pasar un OutputStream al método que escribe los datos. En el "código real" puede pasar un FileOutputStream/FileWriter, mientras que en el código de prueba puede escribir una implementación simulada de OutputStream y verificar lo que se está escribiendo en él.

1

Si no puede controlar el método para poner la salida en una secuencia, entonces diría que necesita refactorizar su código para que el método reciba una secuencia en el parámetro (o en el constructor de su clase) .

Después de eso, las pruebas son bastante fáciles; solo puede verificar la transmisión. El código fácilmente comprobable generalmente equivale a un buen código.

+0

El problema es que en realidad no hace un solo archivo, hace entre 3 y 5 archivos dependiendo de diferentes cosas. Pero como soy realmente novato con junit, quería probarlo primero con un solo archivo para entenderlo por completo. Gracias = D. – Saikios

+0

@Saikios esto es relevante para cualquier cantidad de archivos :) –

1

Aunque su pregunta puede parecer simplista, no llega al corazón de las pruebas unitarias, es necesario escribir un código bien formado que se pueda probar. Esta es la razón por la que algunos expertos aconsejan que primero se debe escribir la prueba de unidad y luego la clase de implementación.

En su caso, le sugiero que permita que su método se ejecute y cree los archivos esperados, después de lo cual su unidad de prueba puede analizar que los archivos están formados correctamente.

+0

Gracias, lo tendré en cuenta para la próxima vez primero haga mi prueba de unidad: D – Saikios

+0

La pieza de código que escribe el archivo completo es probablemente demasiado grande y compleja. JUnit puede mostrar si el código todavía funciona (sin regresión) y esto es algo. Sin embargo realmente bueno Las pruebas de unidad también ayudan a encontrar lo que está roto – h22

Cuestiones relacionadas