2009-08-28 4 views
3

J'écris une suite d'automatisation de test simple qui me dira le nombre de cas de test réussis et échoués. Ci-dessous un exemple simple qui décrira le code:Comment puis-je rediriger la sortie de test à partir de Test :: Simple de Perl?

#! /usr/bin/perl -w 

use Test::Simple tests => 1; 

print "Enter the name of the Book: "; 
$name = <STDIN>; 
chomp($name); 

print "You have entered $name \n"; 

$ori_name = "TextBook"; 

chomp($ori_name); 

ok($name eq $ori_name, 'Checking name'); 

La sortie Je reçois après l'entrée « TextBox » en entrée est la suivante:

1..1 
Enter the name of the Book: TextBook 
You have entered TextBook 
ok 1 - Checking name 

Je voudrais rediriger la même sortie un fichier qui devrait ressembler à

ok 1 - Checking name 

Si j'ajoute le sous-programme suivant

log_message (ok ($name eq $ori_name, 'Checking name'); 


sub log_message 
{ 
    my $message = @_; 

    open(DA, '>>PJ.txt') or die "Couldn't open file PJ.txt"; 

    print DA $message; 

    close (DA); 
} 

Ensuite, je reçois soit '1' ou '0' - pas le texte que je voudrais.

Comment dois-je procéder pour que le résultat de mon code redirige vers un fichier qui doit avoir le format suivant:

ok 1 - Checking name 

ok 2 - Checking others 

et ainsi de suite?

Répondre

4

Vous pouvez regarder à l'aide de la fonction interne « prove » utilitaire qui agit comme un harnais autour de vos tests.Notez la différence entre "diag()" et "note()" (défini dans Test::More):

use strict; 
use warnings; 
use Test::More tests => 3; 

diag "My awesome test suite"; 
note "This message won't be visible when run via the harness"; 

ok(1, "test 1"); 
ok(1, "test 2"); 
ok(0, "test 3"); 

diag "all done!"; 

Lorsqu'il est exécuté par "perl mytest.pl", vous verrez ceci:

1..3 
# My awesome test suite 
# This message won't be visible when run via the harness 
ok 1 - test 1 
ok 2 - test 2 
not ok 3 - test 3 
# Failed test 'test 3' 
# at foo.pl line 10. 
# all done! 
# Looks like you failed 1 test of 3. 

Effectué par "prove mytest.pl", vous verrez ceci (avec un texte dans un joli rouge en colère):

foo.pl .. # My awesome test suite 
foo.pl .. 1/3 
# Failed test 'test 3' 
# at foo.pl line 10. 
# all done! 
# Looks like you failed 1 test of 3. 
foo.pl .. Dubious, test returned 1 (wstat 256, 0x100) 
Failed 1/3 subtests 

Test Summary Report 
------------------- 
foo.pl (Wstat: 256 Tests: 3 Failed: 1) 
    Failed test: 3 
    Non-zero exit status: 1 
Files=1, Tests=3, 0 wallclock secs (0.03 usr 0.01 sys + 0.01 cusr 0.01 csys = 0.06 CPU) 
Result: FAIL 

La sortie stderr de « prove mytest.pl > stdout.txt » wi serez:

# My awesome test suite 

# Failed test 'test 3' 
# at foo.pl line 10. 
# all done! 
# Looks like you failed 1 test of 3. 

AUSSI, vous pouvez créer votre propre logiciel de test et de recueillir des statistiques sur les tests que vous venez de courir avec Test::Harness. Regardons ce qui se passe quand nous exploitons le script de test, nous avons écrit ci-dessus:

use strict; 
use warnings; 
use Test::Harness; 
use Data::Dumper; 

my @results = Test::Harness::execute_tests(tests => ["mytest.pl"]); 
print Dumper(\@results); 

donne la sortie:

# My awesome test suite 

foo.pl .. 1/3 


# Failed test 'test 3' 

# at foo.pl line 10. 

# all done! 

# Looks like you failed 1 test of 3. 


foo.pl .. 
Dubious, test returned 1 (wstat 256, 0x100) 


Failed 1/3 subtests 


$VAR1 = [ 
      { 
      'files' => 1, 
      'max' => 3, 
      'bonus' => 0, 
      'skipped' => 0, 
      'sub_skipped' => 0, 
      'ok' => 2, 
      'bad' => 1, 
      'good' => 0, 
      'tests' => 1, 
      'bench' => bless([ 
           0, 
           '0.02', 
           '0.01', 
           '0.01', 
           '0.01', 
           0 
           ], 'Benchmark'), 
      'todo' => 0 
      }, 
      { 
      'foo.pl' => { 
          'name' => 'foo.pl', 
          'max' => 3, 
          'canon' => '3', 
          'wstat' => '256', 
          'failed' => 1, 
          'estat' => 1 
         } 
      }, 
      {} 
     ]; 
0

j'ajouté ce qui suit dans le code pour obtenir la sortie du résultat:

use Test::More; 

my $builder = Test::More->builder->output('>result.txt'); 

Le résultat se présente comme suit:

not ok 1 - Checking Upgrade 
ok 2 - Checking Others 
not ok 1 - Checking Upgrade 
ok 2 - Checking Others 

je besoin de l'ancien résultat donc j'ajouté

>

devant le fichier result.txt lors de la création du fichier de sortie. Dans le cas si vous voulez recevoir le résultat frais rendre le code comme:

my $builder = Test::More->builder->output('result.txt'); 
Questions connexes