2008-09-15 6 views
5

Есть ли модуль Perl, который позволяет мне просматривать различия между фактическим и опорным выходом программ (или функций)? Тест не проходит, если есть различия.Perl-средства для регрессионного тестирования

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

+0

Test :: FileReferenced с тех пор был выпущен, и он близок к тому, что я искал. – Bart 2011-03-21 23:21:06

ответ

4

Я использую больше тестов: Simple and Test :: More. Я посмотрел на PerlUnit и, похоже, предоставил большую часть функций, которые уже встроены в стандартные библиотеки с библиотеками Test :: Simple и Test :: More.

+0

Я также использую Test :: More. На стороне OO делать вещи я думаю, что Test :: Class используется больше, чем Perlunit. – asksol 2008-09-15 21:01:49

11

У Perl есть отличные утилиты для проведения тестирования. Наиболее часто используемый модуль, вероятно, Test :: More, который предоставляет всю инфраструктуру, которая вам, вероятно, понадобится для написания регрессионных тестов. Утилита доказывания предоставляет простой интерфейс для запуска наборов тестов и подведения итогов. Модуль Test :: Differences (который может использоваться с Test :: More) может быть вам полезен. Он форматирует различия как параллельные сравнения. Что касается фиксации фактического вывода в качестве нового эталонного материала, это будет зависеть от того, как ваш тестовый код обеспечивает вывод и как его захватывать. Это должно быть легко, если вы пишете файлы и затем сравниваете их. Если это так, вы можете использовать модуль Text :: Diff в своем тестовом наборе.

2

Для тестирования выходных данных программы есть Test::Command. Это позволяет легко проверить stdout и stderr (и значение выхода) программ. Например:

use Test::Command tests => 3; 

    my $echo_test = Test::Command->new(cmd => 'echo out'); 

    $echo_test->exit_is_num(0, 'exit normally'); 
    $echo_test->stdout_is_eq("out\n", 'echoes out'); 
    $echo_test->stderr_unlike(qr/something went (wrong|bad)/, 'nothing went bad') 

Модуль также имеет функциональный интерфейс, если он больше по своему вкусу.

2

Стандартные рабочие лошади сообщества - Test :: Simple (для начала работы с тестированием) и Test :: More (на этот раз вы хотите больше, чем Test :: Simple может сделать для вас). Оба они построены вокруг концепции ожидаемого и фактического вывода, и оба они будут показывать вам различия, когда они происходят. Perldoc для этих модулей поможет вам.

Возможно, вы также захотите ознакомиться с Perl QA wiki, и если вы действительно заинтересованы в тестировании perl, список почтовых рассылок perl-qa может быть интересен - хотя обычно это связано с созданием систем тестирования для Perl, чем используя эти системы внутри языка.

И наконец, с помощью инструмента модуля-стартера (из модуля «Стартер») вы получите действительно хороший «стандарт CPAN» для новой работы - или для удаления существующего кода в - включая установку готового тестового жгута.

6

Как уже упоминалось, Test :: Differences является одним из стандартных способов достижения этого, но мне нужно было упомянуть PerlUnit: пожалуйста, не используйте это. Это «отказ» и не интегрируется со стандартными инструментами тестирования Perl. Таким образом, для всех новых модулей тестирования вы должны будете перенести свои функции, если хотите их использовать. (Если кто-то поднял содержание этого заброшенного модуля, напишите мне строку. Мне нужно поговорить с ними, поскольку я поддерживаю основные инструменты тестирования, которые я хотел бы интегрировать с PerlUnit).

Отказ от ответственности: в то время как Id не писал его, в настоящее время я поддерживаю Test :: Differences, поэтому я могу быть предвзятым.

3

Я спрашиваю тех из вас, кто рекомендует использовать PerlUnit. У него не было выхода через 3 года. Если вы действительно хотите тестирование стиля в стиле xUnit, посмотрите на Test::Class, он выполняет ту же работу, но более по-английски. Тот факт, что он по-прежнему поддерживается и имеет регулярные релизы, тоже не повредит.

Просто убедитесь, что это имеет смысл для вашего проекта. Может быть, старый добрый Test::More - это все, что вам нужно (это обычно для меня). Я рекомендую прочитать «Почему вы должны [не] использовать разделы Test :: Class» в документах.