Как правильно тестировать Perl-модули во время разработки? - PullRequest
4 голосов
/ 09 января 2012

Я работаю над персональным модулем Perl, чтобы создать базовую среду сценариев и помочь мне узнать больше о языке.Я создал новый модуль под названием «AWSTools :: Framework» с ExtUtils :: ModuleMaker с помощью инструмента командной строки modulemaker.Я пытаюсь найти подходящий способ проверить его во время разработки.

Созданная структура каталогов включает в себя следующее:

./AWSTOOLS/Framework/lib/AWSTools/Framework.pm
./AWSTOOLS/Framework/t/001_load.t

Автоматически сгенерированный файл 001_load.t выглядит следующим образом:

# -*- perl -*-

# t/001_load.t - check module loading and create testing directory

use Test::More tests => 2;

BEGIN { use_ok( 'AWSTools::Framework' ); }

my $object = AWSTools::Framework->new ();
isa_ok ($object, 'AWSTools::Framework');

Если я пытаюсь запустить скрипт напрямую (из командной строки или из моего редактора TextMate), он завершается неудачно с:

Can't locate AWSTools/Framework.pm in @INC....

Если я пытаюсь запустить prove в каталоге ./AWSTOOLS/Framework, также происходит сбой.

Вопрос в следующем: Как правильно запускать тесты модулей Perl при их разработке?

Ответы [ 5 ]

5 голосов
/ 09 января 2012

Если вы хотите запустить один тестовый файл, вам нужно указать perl, где найти ваши модули так же, как и для любой другой программы. Я использую blib для автоматического добавления правильных путей:

 $ perl Makefile.PL; make; perl -Mblib t/some_test.t

Вы также можете использовать prove, чтобы сделать то же самое. Я не использую prove, но вы можете прочитать его документацию, чтобы понять это. Переключатель -b должен сделать это, но у меня были проблемы с ним, когда он делал неправильно (мог быть просто мой собственный идиотизм).

2 голосов
/ 09 января 2012

Если вы используете типичный набор инструментов (ExtUtils :: MakeMaker), будет perl Makefile.PL для генерации make-файла, затем make test каждый раз после этого. Эти команды должны запускаться из корневого каталога модуля. Смотри http://search.cpan.org/perldoc?ExtUtils::MakeMaker#make_test

Редактировать: и не делайте все вручную, иначе вы будете испытывать ненависть. (Ну, больше, чем обычно.) Вы также захотите хотя бы кратко взглянуть на Test :: Tutorial и https://www.socialtext.net/perl5/testing

Вы также можете спросить дружелюбных * людей в #perl или похожих каналах в предпочитаемых вами IRC-сетях.

* На самом деле не дружелюбный

1 голос
/ 10 января 2012

Я действительно считаю, что Dist :: Zilla достаточно гибок, чтобы позволить вам использовать его для любой разработки.Если вы не загружаете в CPAN , просто убедитесь, что в вашем dist.ini нет [UploadToCPAN].Также убедитесь, что [@Filter] из всех комплектов плагинов, которые его предоставляют.

Dist :: Zilla может быть слишком много для установки только для одного быстрого модулячто вы не собираетесь трогать очень часто.Если у вас более одного дистрибутива в разработке, то это определенно стоит посмотреть.

  • Вы можете легко связать его с вашей VCS с помощью плагинов.(Включая Git )
  • Вы можете создать плагин для развертывания на вашем сервере.Что позволит вам убедиться, что все ваши тестовые файлы пройдут, прежде чем вы сможете развернуть ([TestRelease]).
  • Если вам не нравятся вкладки в ваших исходных файлах, вы можетепроверить это без написания теста самостоятельно ([NoTabsTests]).

Минимальный dist.ini для не-CPAN dist

name    = Your-Library
author  = E. Xavier Ample <example@example.org>
license = Perl_5
copyright_holder = E. Xavier Ample <example@example.org>
copyright_year   = 2012

version = 0.001

[GatherDir]
[PruneCruft]
[PruneFiles]
filename = dist.ini
filename = TODO.txt
match = ^.*[.]te?mp$

[NoTabsTests]
[TestRelease]
[CheckExtraTests]

[ModuleBuild]
[FakeRelease]

Проверьте dist:

dzil test
dzil xtest

Если позднее вырешите загрузить его в CPAN:

  • Заменить [FakeRelease] на [UploadToCPAN].
  • Получить идентификатор PAUSEи установите ~/.pause.

    user YOUR-PAUSE-ID
    password YOUR-PAUSE-PASSWORD
    
  • Запуск dzil release
  • DONE
0 голосов
/ 09 января 2012

Продолжая копаться и экспериментировать, я нашел следующие две вещи, которые работают для меня:

  1. Используйте prove -l в каталоге ./AWSTOOLS/Framework '.Согласно странице proof perldoc , он добавляет каталог "lib" к пути, когда Perl запускает все тесты в каталоге "t".

  2. Для запускасценарий индивидуально / напрямую, я добавляю следующее в начало сценария над строкой use Test::More:

     use FindBin qw($Bin);
     use lib "$Bin/../lib";
    

    Это позволяет мне запускать сценарий непосредственно через строку с запятой и в моем редакторе (TextMate).Это основано на этой странице из книги по программированию на Perl .

Использование флага -l для доказательства очень похоже на то, что нужно делать.

Что касается решения "use lib", я сомневаюсь, что на самом деле это лучшая практика.Если бы это было так, я бы ожидал, что modulemaker создал бы тестовый файл 001_load.t с этим для начала.

0 голосов
/ 09 января 2012

Чтобы быстро вам помочь, я бы порекомендовал посмотреть Тестовые файлы и тестовые модули .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...