0

我目前正在构建一个库以在 Project Euler 谜题中实现。我已经到了构建测试的地步,但在某些时候我的测试失败了。一切都可以导入,但是一旦我测试是否存在子例程,我新创建的测试就会失败。我最初启动了 Test::More,但为了简化我切换到 Test::Simple 的事情。每次运行时,即使在简化为不太复杂的测试功能后,我也会得到相同的错误输出。我的代码中是否有一些我忽略的错误,或者我的系统或环境的某些方面会影响到这一点?

注意:除了 Test::Simple 和 Test::More 文档之外,我还多次查看了 Test::Tutorial。我还确保查看 Perl 文档以了解相关功能(已定义并存在)。在 Ubuntu 14.04 上使用 Perl 5.18.2。

这是输出:

    t/00-load.t ....... 1/? # Testing EulerUtils 0.01, Perl 5.018002, /usr/bin/perl
    t/00-load.t ....... ok   
    t/Qual.t .......... 1/2 
    #   Failed test 'isEven() exists'
    #   at t/Qual.t line 8.
    # Looks like you failed 1 test of 2.
    t/Qual.t .......... Dubious, test returned 1 (wstat 256, 0x100)
    Failed 1/2 subtests 
    t/boilerplate.t ... ok   
    t/manifest.t ...... skipped: Author tests not required for installation
    t/pod-coverage.t .. ok   
    t/pod.t ........... ok   

    Test Summary Report
    -------------------
    t/Qual.t        (Wstat: 256 Tests: 2 Failed: 1)
      Failed test:  2
      Non-zero exit status: 1
    Files=6, Tests=10,  0 wallclock secs ( 0.06 usr  0.01 sys +  0.23 cusr  0.04 csys =  0.34        CPU)
    Result: FAIL
    Failed 1/6 test programs. 1/10 subtests failed.

顺便说一句,没有什么面向对象的……至少到目前为止。我也做了一个虚拟测试,解释了 2 个子测试。

测试本身(更新以明确库位置):

use v5.18.2;
use strict;
use warnings;
use diagnostics;
use FindBin;

use lib "$FindBin::Bin/../lib";
use Test::Simple tests => 1;

use Qual;
ok( defined(&isEven), 'isEven() exists' );

来自模块本身的子程序,使用模块启动器:

...
sub isEven {
        my $n = shift;
        return 1 if ($n % 2 == 0);
}
...

让我知道是否有需要。

4

1 回答 1

0

如果该测试失败,您显然没有从 Qual 导出 isEven。假设您使用的是 Exporter,如果它在 中@EXPORT_OK,您需要在 Qual.t 中明确请求它:

use Qual 'isEven';

或将其移至@EXPORT(尽管现在建议默认情况下不导出任何内容)

于 2014-09-02T15:28:11.997 回答