Параметризация perl *.t Доказать существующие тесты

У меня есть куча тестов Perl:

  1. Функциональные тесты
  2. Механизировать тесты
  3. Актуальные юнит-тесты, утверждение функций и возвращаемых значений и т. Д.
  4. Тесты, которые включают внешние сервисы, такие как WebServices
  5. БД-ориентированные тесты
  6. 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;
Другие вопросы по тегам