我目前正在构建一个库以在 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);
}
...
让我知道是否有需要。