Estoy practicando para hacer un nuevo módulo usando Module :: Starter. He escrito algunos casos de prueba para un paquete, y funcionan bien a veces.¿Cómo depuro un módulo creado por Module :: Starter?
Sin embargo, me di cuenta de que hay dos problemas:
Cuando fallan los casos de prueba, quiero poner algunas declaraciones de impresión en la función que se están probando. Ejecuté
make test
y solo me dice que mis casos de prueba fallaron, no muestra mi salida impresa, a pesar de que estoy realmente seguro de que se han alcanzado los estados de impresión.Digamos que tengo tres casos de prueba para probar una función, puse una declaración de impresión dentro de la función, cuando se ejecutan los casos de prueba, informa que solo se ejecutó 1 de los tres casos de prueba. Si elimino la declaración de impresión, se ejecutarán los tres casos de prueba. ¿Porqué es eso?
Aquí está mi código:
# package declaration and stuff...
sub get_in {
my ($hash, @path) = @_;
my $ref = $hash;
print 'lol'; # This is the troublesome print statement. Remove this statement and all three test cases will run and pass
foreach (@path) {
if (ref($ref) eq 'HASH' && exists $ref->{$_}) {
$ref = $ref->{$_};
} else {
return undef;
}
}
return $ref;
}
Se trata de los casos de prueba:
use Test::More tests => 3;
use strict;
use warnings;
use diagnostics;
require_ok('Foo::Doc');
ok(Foo::Doc::get_in({ 'a' => { 'b' => { 'c' => 101 } } }, 'a', 'b', 'c') == 101);
ok(@{ Foo::Doc::get_in({ 'a' => { 'b' => { 'c' => [ 1, 2, 3 ] } } }, 'a', 'b', 'c') } == @{ [ 1, 2, 3 ] });
Esta pregunta no es realmente específica de Module :: Starter. El diseño del proyecto estándar de Perl incluye un directorio 't' con las pruebas' * .t' que usan Test :: Simple o Test :: More o algo así como el éxito o el fracaso de la prueba de salida. Cada kit de herramientas de construcción de Perl proporciona herramientas para ejecutar sus pruebas y generar los resultados en el informe estándar utilizando las herramientas proporcionadas en el núcleo de Perl. – zostay