Есть ли документация для написания тестов (и сборки) с помощью Module :: Build? - PullRequest
0 голосов
/ 13 сентября 2010

Итак, я сделал несколько модулей для собственного использования, и мне интересно, есть ли документация о том, как писать тесты для модулей Perl, используя Module :: Build.

Конкретная проблема, с которой я сталкиваюсь, состоит в том, что у меня есть три модуля HomeBrew::IO, HomeBrew::Stats и HomeBrew::Bio, и я не могу понять, как их собрать или протестировать отдельно, как файлы расположены.

Три файла модуля расположены в одном каталоге .../HomeBrew/lib/HomeBrew/, и у меня есть три файла Build.PL, расположенные в каталоге .../HomeBrew/ (с именем IO-Build.PL и т. Д.), И три файла .t в .../HomeBrew/t/ (с именем HomeBrew-IO.t и т. Д.).

Кажется, что происходит то, что три файла Build.PL, кажется, не знают, что они должны собирать только один модуль за раз. Я покажу вам один из них:

#!/usr/bin/perl

use warnings;
use strict;
use Module::Build;

my $build = Module::Build->new
    (
     module_name => "HomeBrew::IO",
     dist_author => "George Locke",
     dist_abstract => "Various utilities for reading files",
     build_requires => {
        'Test::More' => '0.10',
        'POSIX' => '0', # for tmpname()
        'Test::Exception' => '0', # to test that checkExist dies
     },
    );
$build->create_build_script();

(мне, вероятно, следует использовать File :: Temp вместо POSIX, но это используется только в тестировании, поэтому он не имеет высокого приоритета)

В будущем я хотел бы изменить свои тестовые сценарии, чтобы иметь по одному для каждой подпрограммы, чтобы я мог сказать Build test checkExist и проверять только один в подпрограмме за раз.

Итак,

  1. как мне убедиться, что create_build_script () не включает каждый файл .pm в lib/HomeBrew. Я бы предпочел хранить все файлы модуля HomeBrew в каталоге .../HomeBrew, но нужно ли разделять каждый из них на разные каталоги?

  2. Как мне выполнить тесты для каждой подпрограммы, чтобы Module :: Build знал, как тестировать весь модуль или только одну его часть?

прямо сейчас, когда я говорю ./Build test, он тестирует все три модуля одновременно (а ./Build install устанавливает все три сразу).

Ответы [ 2 ]

5 голосов
/ 13 сентября 2010

Мне кажется, что проблема заключается в вашей предпосылке, что вам нужно построить и протестировать их отдельно. Если вы хотите сделать это, они должны быть отдельными установками, в своих собственных каталогах, со своими собственными файлами Build.PL и т. Д. Если, однако, они должны распространяться вместе, их следует собрать и протестировать вместе.

Что касается отдельного тестирования, вы можете протестировать каждый сабвуфер в отдельном тестовом файле или разделить тесты любым другим способом. Вам не нужно вызывать свои тесты с помощью make test или ./Build test - вы всегда можете просто явно запустить интересующий вас тест (ы): perl -Ilib t/<name of test>.

1 голос
/ 14 сентября 2010

В своем комментарии к Ether вы говорите, что не всегда хотите запускать каждый тест. В этом случае вы, вероятно, захотите использовать App :: Prove для запуска только тех тестов, которые хотите увидеть. Он имеет много других функций для управления информацией, которую вы отслеживаете и видите.

...