Параметризация perl *.t Доказать существующие тесты
У меня есть куча тестов Perl:
- Функциональные тесты
- Механизировать тесты
- Актуальные юнит-тесты, утверждение функций и возвращаемых значений и т. Д.
- Тесты, которые включают внешние сервисы, такие как WebServices
- БД-ориентированные тесты
- REST тесты
Я запускаю их все с помощью функции "Докажи" и теоретически переставляю их в разные каталоги и запускаю что-то вроде find t/ -name '*.t' ! -name '*timeout*' | xargs prove -l
, но очень сложно (и не очень хорошо спроектировано) назвать тесты определенным образом, поэтому мы можем проанализировать их с помощью find
,
Есть ли способ, которым мы можем передать подстановочный список тестов prove
когда мы запустим его через командную строку?
Если нет, есть ли более здравый подход, чем тот, который мы используем в настоящее время?
2 ответа
Обычный способ сделать это - через переменные окружения. Тестовый файл проверяет, должен ли он работать, и если нет skip_all
,
Например:
use strict;
use warnings;
use Test::More;
BEGIN {
plan skip_all => "not running extended tests" unless $ENV{EXTENDED_TESTING};
};
# your slow tests here
done_testing();
Обычно этот тест пропускают. Но если вы установите EXTENDED_TESTING
переменная среды для "1"
будет работать.
Стандартные переменные среды включают EXTENDED_TESTING
, RELEASE_TESTING
, а также NONINTERACTIVE_TESTING
, NO_NETWORK_TESTING
также завоевывает популярность.
Существуют различные модули для автоматизации этого, такие как Test:: Is, который допускает более простой синтаксис:
use strict;
use warnings;
use Test::More;
use Test::Is "extended";
# your slow tests here
done_testing();
Если у вас есть другие категории, относящиеся к конкретному приложению, вам придется самостоятельно придумывать некоторые переменные среды. Если вы думаете, что они кажутся в целом полезными, напишите о них в блоге, и, возможно, они поймут и станут стандартными переменными среды.
Я думаю, что нашел ответ как Test::Less
Test::Less - Категоризация теста и выполнение подмножества
test-less обычно хранит индексный файл сопоставлений между тегами и тестовыми файлами в файле с именем t/Test-Less/index.txt. Вы можете переопределить это с параметром --file или переменной среды TEST_LESS_INDEX.
Tags are strings matching /^[\w\-]+$/.
Команды -list и -prove принимают то, что называется спецификацией тега.
Спецификация - это список тегов и, возможно, имен файлов.
без тестов -доказать Foo Bar Baz
Запускает все тесты foo, bar-тесты и baz-тесты.
test-less -prove foo,bar,baz
Даже после того, как я смог исправить ошибку компиляции в Test::Less, я все равно не смог запустить какие-либо тесты, используя Test::Less, который был прерван с 2009 года. Поэтому ответ на Test::Class может быть ответом:
http://search.cpan.org/~ether/Test-Class-0.46/lib/Test/Class.pm
Иногда вы просто хотите запустить один тест. Комментирование других тестов или написание кода для их пропуска могут быть хлопотными, поэтому вы можете указать переменную среды TEST_METHOD. Ожидается, что значение является допустимым регулярным выражением и, если оно присутствует, запускает только тестовые методы, имена которых соответствуют регулярному выражению. Испытания при запуске, настройке, отключении и выключении все еще будут выполняться.
Один из простых способов сделать это - указать переменную окружения перед вызовом метода runtests.
Running a test named customer_profile:
#! /usr/bin/perl
use Example::Test;
$ENV{TEST_METHOD} = 'customer_profile';
Test::Class->runtests;
Running all tests with customer in their name:
#! /usr/bin/perl
use Example::Test;
$ENV{TEST_METHOD} = '.*customer.*';
Test::Class->runtests;