2008-09-15 4 views
5

¿Hay un módulo Perl que me permita ver diferencias entre la salida real y de referencia de los programas (o funciones)? La prueba falla si hay diferencias.Perl ayudas para la prueba de regresión

Además, en caso de que haya diferencias pero la salida es correcta (porque la funcionalidad ha cambiado), deseo poder confirmar la salida real como salida de referencia futura.

+0

Test :: FileReferenced ha sido lanzado desde entonces, y está cerca de lo que estaba buscando. – Bart

Respuesta

4

Tiendo a utilizar más de las funciones Test :: Simple y Test :: More. Miré a PerlUnit y parece proporcionar gran parte de la funcionalidad que ya está incorporada en las bibliotecas estándar con las bibliotecas Test :: Simple y Test :: More.

+0

También uso Test :: More. En el lado OO de hacer las cosas, creo que Test :: Class se usa más que Perlunit. – asksol

11

Perl tiene excelentes utilidades para hacer las pruebas. El módulo más utilizado es probablemente Test :: More, que proporciona toda la infraestructura que probablemente necesite para escribir pruebas de regresión. La utilidad de prueba proporciona una interfaz sencilla para ejecutar suites de prueba y resumir los resultados. El módulo Test :: Differences (que se puede usar con Test :: More) también puede serle útil. Formatea las diferencias como comparaciones lado a lado. En cuanto a comprometer la salida real como el nuevo material de referencia, eso dependerá de cómo el código bajo prueba proporciona salida y cómo la captura. Debería ser fácil si escribe en archivos y luego los compara. Si ese es el caso, es posible que desee utilizar el módulo Text :: Diff dentro de su suite de pruebas.

2

Para probar la salida de un programa, hay Test::Command. Permite verificar fácilmente stdout y stderr (y el valor de salida) de los programas. Por ejemplo:

use Test::Command tests => 3; 

    my $echo_test = Test::Command->new(cmd => 'echo out'); 

    $echo_test->exit_is_num(0, 'exit normally'); 
    $echo_test->stdout_is_eq("out\n", 'echoes out'); 
    $echo_test->stderr_unlike(qr/something went (wrong|bad)/, 'nothing went bad') 

El módulo también tiene una interfaz funcional también, si es más de su agrado.

2

Los caballos de batalla estándar de la comunidad son Test :: Simple (para comenzar con la prueba) y Test :: More (por una vez que desee más de lo que Test :: Simple puede hacer por usted). Ambos se basan en el concepto de producción esperada versus producción real, y ambos mostrarán las diferencias cuando ocurran. El perldoc para estos módulos lo pondrá en camino. Quizás desee consultar Perl QA wiki, y si está realmente interesado en las pruebas de perl, la lista de correo perl-qa puede valer la pena examinarla, aunque generalmente se trata más de la creación de sistemas de prueba para Perl que usando esos sistemas dentro del lenguaje.

Finalmente, el uso de la herramienta de inicio de módulo (desde Module :: Starter) le dará un diseño "estándar CPAN" muy agradable para el nuevo trabajo - o para dejar caer código existente - incluyendo una configuración de arnés de prueba preparada.

6

Como se mencionó, Test :: Differences es una de las formas estándar de lograr esto, pero necesitaba mencionar PerlUnit: no use esto. Es "abandonware" y no se integra con las herramientas de prueba estándar de Perl. Por lo tanto, para todos los nuevos módulos de prueba que salen, tendrías que portar su funcionalidad si quisieras usarlos. (Si alguien ha recogido el mantenimiento de este módulo abandonado, escríbame. Necesito hablar con ellos mientras mantengo las herramientas de prueba básicas que me gustaría ayudar a integrar con PerlUnit).

Descargo de responsabilidad: mientras Id no lo escribió, actualmente mantengo Test :: Differences, por lo que podría ser parcial.

3

Pregunto a aquellos de ustedes que recomiendan el uso de PerlUnit. No ha tenido un lanzamiento en 3 años. Si realmente quieres probar xUnit-style, echa un vistazo a Test::Class, hace el mismo trabajo, pero de una manera más Perlish. El hecho de que todavía se mantenga y tenga lanzamientos regulares tampoco duele.

Solo asegúrese de que tenga sentido para su proyecto. Tal vez bueno todo lo que necesita es Test::More (generalmente es para mí). Recomiendo leer las secciones "Por qué no se debe [usar] Test :: Class" en los documentos.

Cuestiones relacionadas