2015-03-30 1 views
0

Je reçois le retraçage suivant quand je tente de prove factorial:Impossible de détecter la source de «factorielle». Pourquoi?

Cannot detect source of 'factorial'! at /usr/share/perl/5.18/TAP/Parser/IteratorFactory.pm line 263. 
    TAP::Parser::IteratorFactory::detect_source('TAP::Parser::IteratorFactory=HASH(0x2856b08)', 'TAP::Parser::Source=HASH(0x2856bc8)') called at /usr/share/perl/5.18/TAP/Parser/IteratorFactory.pm line 213 
    TAP::Parser::IteratorFactory::make_iterator('TAP::Parser::IteratorFactory=HASH(0x2856b08)', 'TAP::Parser::Source=HASH(0x2856bc8)') called at /usr/share/perl/5.18/TAP/Parser.pm line 469 
    TAP::Parser::_initialize('TAP::Parser=HASH(0x28569e8)', 'HASH(0x23d8cb8)') called at /usr/share/perl/5.18/TAP/Object.pm line 58 
    TAP::Object::new('TAP::Parser', 'HASH(0x23d8cb8)') called at /usr/share/perl/5.18/TAP/Object.pm line 133 
    TAP::Object::_construct('TAP::Harness=HASH(0x2131db8)', 'TAP::Parser', 'HASH(0x23d8cb8)') called at /usr/share/perl/5.18/TAP/Harness.pm line 779 
    TAP::Harness::make_parser('TAP::Harness=HASH(0x2131db8)', 'TAP::Parser::Scheduler::Job=HASH(0x28235d0)') called at /usr/share/perl/5.18/TAP/Harness.pm line 578 
    TAP::Harness::_aggregate_single('TAP::Harness=HASH(0x2131db8)', 'TAP::Parser::Aggregator=HASH(0x2740ae0)', 'TAP::Parser::Scheduler=HASH(0x2823570)') called at /usr/share/perl/5.18/TAP/Harness.pm line 670 
    TAP::Harness::aggregate_tests('TAP::Harness=HASH(0x2131db8)', 'TAP::Parser::Aggregator=HASH(0x2740ae0)', 'factorial') called at /usr/share/perl/5.18/TAP/Harness.pm line 485 
    TAP::Harness::__ANON__() called at /usr/share/perl/5.18/TAP/Harness.pm line 498 
    TAP::Harness::runtests('TAP::Harness=HASH(0x2131db8)', 'factorial') called at /usr/share/perl/5.18/App/Prove.pm line 554 
    App::Prove::_runtests('App::Prove=HASH(0x2120170)', 'HASH(0x2606428)', 'TAP::Harness', 'factorial') called at /usr/share/perl/5.18/App/Prove.pm line 512 
    App::Prove::run('App::Prove=HASH(0x2120170)') called at /usr/bin/prove line 11 

Ceci est mon factorial.pm:

package factorial; 

use Exporter qw(import); 

BEGIN { 
    our @EXPORT_OK = qw(factorial); 
} 

sub factorial 
{ 
    my ($parm) = @_; 

    my $factorial = 1; 

    if ($parm == 0) 
    { 
     return $factorial; 
    } 

    foreach my $i (1..$parm) { 
     $factorial *= $i; 
    } 

    return $factorial; 
} 

1; 

Et mon factorial.t:

#!/usr/bin/perl -w 
use Test::More; 

use factorial 'factorial'; 
is(factorial(0), 1, "boundary case"); 
is(factorial(1), 1, "factorial(1)"); 
is(factorial(2), 2, "factorial(2)"); 
is(factorial(6), 720, "factorial(6)"); 

done_testing; 

J'ai vérifié que mon factorial Module fonctionne en exécutant ce programme (ou, au moins, fait une chose correctement).

#!/usr/bin/perl -w 

use factorial 'factorial'; 

my $parm = 5; 
print "Factorial($parm) = ", factorial($parm), "\n"; 
+4

(Les noms de paquets en minuscules sont traditionnellement réservés aux pragmas (directives du compilateur, souvent portée lexicalement).) – ikegami

Répondre

5

La page de manuel pour prove déclare qu'il accepte les options et les fichiers ou répertoires:

prove [options] [files or directories] 

il ne fera pas l'expansion de nom pour vous.

Vous avez donné prove un argument de factorial, alors que je soupçonne que votre fichier de test est nommé factorial.t

Les prove commandes suivantes doivent tous être valides:

prove factorial.t 
prove fac* 
prove <directory that contains factorial.t> 

Note: les deux dernières commandes pourrait exécuter plusieurs tests en fonction du contenu du répertoire de travail ou du répertoire que vous passez à prove

+0

Argh !! Si simple. –