Ошибка тестирования при сборке модуля
В настоящее время я работаю над созданием библиотеки для реализации в головоломках Project Euler. Я дошел до стадии построения тестов, но в какой-то момент мои тесты провалились. Все импортируется нормально, но как только я проверяю наличие подпрограммы, мой недавно созданный тест не проходит. Я изначально запустил Test::More, но для упрощения я переключился на Test:: Simple. При каждом запуске, даже после упрощения до менее сложных функций для тестирования, я получаю одинаковые сообщения об ошибках. Есть ли какая-то ошибка в моем коде, которую я пропускаю, или какой-то аспект моей системы или среды, влияющий на это?
ПРИМЕЧАНИЕ: я несколько раз просматривал Test:: Tutorial в дополнение к документам Test:: Simple и Test::More. Я также проверил документы Perl на наличие соответствующих функций (определенных и существующих). Использование Perl 5.18.2 в Ubuntu 14.04.
Вот вывод:
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);
}
...
Дайте мне знать, если что-то нужно.
1 ответ
Если этот тест не пройден, вы, очевидно, не экспортируете isEven из Qual. Предполагая, что вы используете Exporter, если он находится в @EXPORT_OK
вам нужно явно запросить его в Qual.t:
use Qual 'isEven';
или переместить его в @EXPORT
(хотя в настоящее время рекомендуется ничего не экспортировать по умолчанию).