Выполнение(прогон) тестов

Прежде, чем вы сможете извлечь пользу от написания тестов, вы должны научиться выполнять их. Существует несколько способов сделать это.

Чтобы увидеть реальные тесты в действии, скачайте последнюю версию Test::Harness из CPAN и распакуйте её в домашнем каталоге. Перейдите в созданную директорию и установите модуль ( см. "Установка Тестовых Модулей"). Чтобы запустить все тесты сразу, введите в командной строке make test:

    $ make test
    PERL_DL_NONLAZY=1 /usr/bin/perl5.8.6 "-MExtUtils::Command::MM" "-e" \
        "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
    t/00compile.........ok 1/5# Testing Test::Harness 2.46
    t/00compile.........ok
    t/assert............ok
    t/base..............ok
    t/callback..........ok
    t/harness...........ok
    t/inc_taint.........ok
    t/nonumbers.........ok
    t/ok................ok
    t/pod...............ok
    t/prove-globbing....ok
    t/prove-switches....ok
    t/strap-analyze.....ok
    t/strap.............ok
    t/test-harness......ok
            56/208 skipped: various reasons
    All tests successful, 56 subtests skipped.
    Files=14, Tests=551,  6 wallclock secs ( 4.52 cusr +  0.97 csys =  5.49 CPU)

Что произошло ?

make test - третий шаг в инсталляции почти каждого модуля Perl. Эта команда выполняет все тестовые файлы, которые содержатся в установочном пакете модуля. И в нашем случае были запущены все тестовые файлы Test::Harness, с последующим выводом информации о результатах.

Вопросы и ответы

  • Вопрос:

    Как запускать тесты для дистрибутивов, которые не используют Makefile.PL ?

  • Ответ:

    make test используется вместе с ExtUtils::MakeMaker - старым и почтенным модулем. Но есть также Module::Build, который в некоторых случаях проще для использования. Если в установочном комплекте есть файл Build.PL, используйте соответственно команды perl Build.PL, perl Build, и perl Build test. Они работают также как было ранее описано с командой make.

  • Вопрос:

    Как запускать тесты по отдельности ?

  • Ответ:

    Команда make test, запускает все тесты дистрибутива в определенном порядке. Вместо нее можно использовать команду prove, если вы хотите запускать только некоторые тесты по отдельности. prove запускает тестовые файлы, имена которых вы передадите ей в качестве аргументов командной строки. Срабатывают только нужные тесты с выводом отчета их результатов.

        $ prove t/strap*.t
        t/strap-analyze....ok
        t/strap............ok
        All tests successful.
        Files=2, Tests=284,  1 wallclock secs ( 0.66 cusr +  0.14 csys =  0.80
            CPU)

    Если вы хотите увидеть более подробный отчет по тестам, используйте флаг -v:

        $ prove -v t/assert.t
        t/assert....1..7
        ok 1 - use Test::Harness::Assert;
        ok 2 - assert(  ) exported
        ok 3 - assert( FALSE ) causes death
        ok 4 -   with the right message
        ok 5 - assert( TRUE ) does nothing
        ok 6 - assert( FALSE, NAME )
        ok 7 -   has the name
        ok
        All tests successful.
        Files=1, Tests=7,  0 wallclock secs ( 0.06 cusr +  0.01 csys =  0.07 CPU)

    Этот флаг указывает prove не скрывать подробностей за кулисами. В результате на экран выводится дополнительная информация вместе с кратким отчетом. Это очень удобно для разработки и отладки.

    Примечание: Если у вас не установлен prove, вы используете старую версию Test::Harness. Находясь в установочном каталоге Test::Harness, введите команду bin/prove.

  • Вопрос:

    Как запускать индивидуальные тесты без prove ?

  • Ответ:

    В большинстве случаев вы можете запускать тесты вручную, как обычные скрипты на Perl.

        $ perl t/00compile.t
        1..5
        ok 1 - use Test::Harness;
        # Testing Test::Harness 2.42
        ok 2 - use Test::Harness::Straps;
        ok 3 - use Test::Harness::Iterator;
        ok 4 - use Test::Harness::Assert;
        ok 5 - use Test::Harness;

    Упс! Этот тест сработал над установленным модулем Test::Harness 2.42, хотя надо протестировать новую версию 2.46. Это происходит, потому что в массиве @INC не прописан путь до каталога где находится наш модуль. Есть несколько способов решить эту проблему. Но мы используем прагму blib предназначенную как раз для подборки модулей, собранных как командой make, так и командой perl Build.

        $ perl -Mblib t/00compile.t
        1..5
        ok 1 - use Test::Harness;
        # Testing Test::Harness 2.46
        ok 2 - use Test::Harness::Straps;
        ok 3 - use Test::Harness::Iterator;
        ok 4 - use Test::Harness::Assert;
        ok 5 - use Test::Harness;

    С флагом -M perl загружает прагму blib просто как если бы в файле скрипта содержалась строка use blib;

    Аргумент TEST_FILES для make test также указывает какие именно тестовые файлы нужно запустить:

        $ make test TEST_FILES=t/00compile.t
        t/00compile....ok 1/5# Testing Test::Harness 2.46
        t/00compile....ok
        All tests successful.
        Files=1, Tests=5,  0 wallclock secs ( 0.13 cusr +  0.02 csys =  0.15
            CPU)

    Примечание: В параметре TEST_FILES можно указать шаблон файлов, например так: TEST_FILES=t/strap*.t, таким образом будут запущены все тестовые файлы, которые соответствуют указанному шаблону.

    Команда make с параметром TEST_VERBOSE=1 выводит подробный отчет по тестам:

Statistic

About this Entry

This page contains a single entry by Dinar published on March 21, 2010 12:33 PM.

Установка тестовых модулей was the previous entry in this blog.

Интерпретация результатов прогона тестов is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.