2012-06-04 7 views
5

¿Existe alguna manera de escribir pruebas para las llamadas Perl que espera que se mueran? Me gustaría verificar que ciertas llamadas morirán con entradas mal formateadas.Planificación de muertes en pruebas de perl

sub routine_a { 
    my $arg = shift; 
    die if $arg eq 'FOO'; 
    print "routine_a: $arg\n"; 
} 
sub routine_b { 
    my $arg = shift; 
    die if $arg eq 'BAR'; 
    print "routine_b: $arg\n"; 
} 

sub test_all { 
    assert(routine_a("blah")); 
    assert(routine_b("blab")); 
    assert_death(routine_a("FOO")); 
    assert_death(routine_b("BAR")); 
} 

Respuesta

6

Ver Test::Exception:

use Test::Exception; 
dies_ok { $foo->method } 'expecting to die'; 
+2

me parece [Test :: Fatal] (http://search.cpan.org/perldoc?Test%3a%3aFatal) a ser más fácil de usar que Test :: Excepción, como dije en [mi responder a una pregunta anterior sobre el mismo tema] (http://stackoverflow.com/a/4522172/8355). – cjm

5

Se envuelve la prueba en un bloque de eval { ... } y comprobar si [email protected] se estableció.

eval { test_thats_supposed_to_fail() }; 
ok([email protected] , "test failed like it was supposed to"); 
+0

Preferiblemente, su prueba debe morir con un mensaje esperado, para que pueda verificar el valor de $ @ en lugar de simplemente probar su existencia. –

Cuestiones relacionadas