Ошибка тестирования при сборке модуля

В настоящее время я работаю над созданием библиотеки для реализации в головоломках 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 (хотя в настоящее время рекомендуется ничего не экспортировать по умолчанию).

Другие вопросы по тегам