2015-03-30 72 views
0

我正在以下回溯当我尝试prove factorial无法检测到“阶乘”的来源。为什么?

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 

这是我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; 

而且我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; 

我核实,我的factorial模块通过运行这个程序来工作(或者,至少,正确地做一件事)。

#!/usr/bin/perl -w 

use factorial 'factorial'; 

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

(小写包名称通常为编译指示保留(编译器指令,通常在词汇范围内)。) – ikegami 2015-03-30 17:37:03

回答

5

的手册页prove指出,它可以接受一些选项和文件或目录:

prove [options] [files or directories] 

它不会为你做任何名称扩张。

你给provefactorial参数,而我怀疑你的测试文件名为factorial.t

以下prove命令都应该是有效的:

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

注:最后两个命令可能根据工作目录的内容或您传递的目录运行多个测试prove

+0

Argh !!很简单。 – 2015-03-30 17:37:28

相关问题