Как я могу разделить различные виды Perl-тестов, чтобы мне не пришлось их запускать? - PullRequest
14 голосов
/ 11 ноября 2009

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

Я подумал, что мог бы установить некоторую переменную окружения, такую ​​как 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.

Ответы [ 4 ]

10 голосов
/ 11 ноября 2009

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

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

8 голосов
/ 11 ноября 2009

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

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

3 голосов
/ 18 января 2010

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

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

 % perl -Mblib t/some_test.t

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

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

3 голосов
/ 11 ноября 2009

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

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