Как я могу отделить разные типы тестов Perl, поэтому мне не нужно запускать их все?

Я заметил, что в Perl пользователь должен вставлять все тесты в каталог t. Как вы отделяете unit test от функциональных? Или, чтобы сделать вопрос более простым и очевидным, как вы отделяете тесты, которые быстро запускаются из тех, которые этого не делают? Когда все тесты выполняются вместе, тестирование занимает слишком много времени, чтобы регулярно использоваться при разработке, что очень жаль.

Я предположил, что могу установить некоторую переменную среды, например QUICK_TEST, и пропустить длинные тесты в соответствии со своим значением. Разделяете ли вы единичные и функциональные тесты? Как? (Это не значит, что это будет опрос - я просто подумал, может быть, это какое-то идиоматическое решение.)


Обновление: До сих пор я пришел к следующему:

package Test::Slow;

use strict;
use Test::More;

BEGIN {
    plan(skip_all => 'Slow test.') if $ENV{QUICK_TEST};
}

1;

И в ближайшем файле .t:

# This is a slow test not meant
# to run frequently.
use Test::Slow;
use Test::More;

Кажется, что это хорошо работает.

P.S. Теперь доступен как Test::Slow в CPAN.

Ответы

Ответ 1

Вы можете разделить тесты на подкаталоги под t, с любой схемой категоризации, которую вы хотите. Если вы используете переменную окружения, я бы рекомендовал сделать по умолчанию (если переменная не установлена) для запуска всех тестов. Я видел ситуации, когда t/содержит только те тесты, которые будут регулярно выполняться в процессе разработки, а другие тесты помещаются в другой каталог (например, t-selenium/).

Я думаю, что дело доходит до того, что последовательность важнее выбора, который вы делаете; почти все будет работать, если вы согласны.

Ответ 2

Запустите prove --state=all,save один раз, чтобы добавить некоторую информацию в .prove.

Запустите prove --state=slow -j9, если у вас многоядерный компьютер, и ваши тесты можно запустить одновременно. Это приведет к тому, что ваши самые длительные запущенные тесты начнутся с самого начала, так что они с большей вероятностью будут закончены, прежде чем все ваши другие тесты будут выполнены. Это может сократить общее время до завершения, не предотвращая запуск каких-либо тестов.

Ответ 3

Обычно тест только для автора помещается в каталог xt. Они запускаются вручную. Итак, если вы длительные тесты только для авторов, используйте xt. В общем случае t является общим для модулей CPAN. Для частного использования вы можете разместить их в любом месте.

Ответ 4

В Test:: Manifest, у меня есть способ присвоить каждому тестовому файлу уровень. Файл теста запускается только в том случае, если уровень тестирования превышает этот порог. Низкий уровень будет тем, что я хочу запускать все время, на следующем уровне немного медленнее и т.д.

Однако я почти никогда не использовал его. Если я сосредоточусь на одной части системы, я просто запускаю тест для этой части:

 % perl -Mblib t/some_test.t

Некоторым людям нравится использовать prove, чтобы сделать то же самое.

Я только закончил запуск полного набора тестов, когда мне понадобится интеграционное тестирование, чтобы увидеть, не изменились ли мои изменения что-то еще.