A partir de un archivo de prueba Perl, ¿cómo puedo comprobar el contenido de un archivo?

StackOverflow https://stackoverflow.com/questions/2543325

  •  23-09-2019
  •  | 
  •  

Pregunta

Quiero probar un guión que he escrito en Perl y comprobar específicamente qué salida se escribe en el archivo. Lo escribí hace algún tiempo y no quiero modificarlo hasta el punto de convertirlo en un módulo, pero le gustaría que las pruebas de regresión antes de añadir algunos pequeños cambios funcionales.

Hasta ahora tengo

use Test::Command tests => 10;

exit_is_num($cmd, 0);
....

Sin embargo, el comando produce algunos archivos y quiero comprobar los archivos son los mismos que espero (ya sea igual o coincidir con alguna expresión regular). Cualquier sugerencia

¿Fue útil?

Solución

No hay nada mágico en una prueba. Leer los archivos en, compruebe que tienen los contenidos adecuados. Pantano sencilla.

open my $fh, $file;
my $have = join '', <$fh>;

is $have, <<'WANT', "contents of $file";
The quick brown fox
jumped over the lazy grey dog.
WANT

Nada innovador allí. Test :: Archivo :: Contenido le proporcionará algunas funciones de utilidad por lo que no tiene que escribir una y otra vez.

Si está probando un montón de archivos, puede hacer que los datos de proceso impulsadas.

my %file_tests;
$file_tests{"expected_filename"} = <<'WANT';
Expected content
WANT
... and so on ...

for my $file (keys %file_tests) {
    my $want = $file_tests{$file};

    file_contents_is($file, $want, "contents of $file");
}

Si el contenido es grande es posible que desee para pegar el resultado esperado en archivos y el uso files_contents_identical ().

Por último, si usted quiere asegurarse de que el programa produjo sólo los archivos que se pueden esperar y no hay perros callejeros, hacer un directorio temporal, chdir en eso, ejecute el programa desde allí, y compruebe el directorio sólo contiene los archivos que se pueden esperar . Lo dejo como ejercicio para el lector.

Otros consejos

OK, voy a ir con el enfoque de bricolaje fuerza bruta (sin embargo es posible que ya hay algún módulo de prueba con la API de comprobación de archivo - yo nunca topamos con uno tan flexible / genérica como lo que necesitábamos y nos escribió y nunca sintieron la imperiosa necesidad de buscar más profundo :).

Voy a describir una configuración de prueba bastante genérico, es posible que desee / necesidad único archivo muy específico probar aspectos de la misma.

Lo que hacemos en este caso es literalmente lo que su especificación funcional por encima de los estados, como parte del marco general de la prueba:

  • ¿Tiene una biblioteca de pruebas con dos métodos (entre otros) - test_file_identical() y test_grep_file() . Si necesita ayuda para escribir los dos, por favor dejar un comentario y voy a ofrecer algunas pistas (usamos diferentes comparadores, incluyendo una combinación de -e, las comparaciones de diversos atributos stat, la comparación de cadenas de contenido de archivo de referencia vs. archivo de prueba obtenidos a través de File::Slurp y haciendo grep del archivo, línea por línea o por medio de contenidos sorbió para archivos pequeños, incluyendo la comparación de los resultados grep masajeados a un archivo de referencia.

  • Tener los casos sus pruebas organizadas en sub-directorios (o bolas de alquitrán), uno por cada prueba y cada prueba consta de 2 - directorios. Archivos de entrada y archivos de salida esperados

  • Tener el bucle del motor de guiones de prueba sobre los casos de prueba (que para nosotros son meta-descrito ya sea por una estructura de datos Perl o mejor aún, un archivo XML para que los analistas de negocios pueden jugar con ellos si es necesario).

  • Si un caso de prueba especifica que las necesidades de prueba para concuerdan (exactamente o por medio de grep), el motor de prueba detecta los archivos adecuados (ya sean nombres codificados de forma rígida, o por medio de patrón de nombre especificado en el caso de la prueba), se aplica a los archivos métodos de prueba mencionados en el primer punto

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