April 2010 Archives

Данный пост написан по материалам книги "Perl Testing: A Developer's Notebook"

Perl предоставляет множество удобных модулей для тестирования, например Test::Builder, с котороми производится взаимодействие через единый формат передачи результатов тестирования ( анг. - Test Anything Protocol(TAP) ). Понимание TAP помогает интерпретировать результаты испытаний и способствует более правильной организации тестов в ваших проектах.

Примечание: TAP - Test Anything Protocol - единый формат передачи результатов тестирования.

Примечание: Далее все тестовые модули выводят отчеты в формате TAP, Test::Harness их интерпретирует.

Примечание: Перевод на русский язык Test::Harness .

Сохраните следующий код программы в sample_output.pl

#!perl

print <<END_HERE;
1..9
ok 1
not ok 2
#     Failed test (t/sample_output.t at line 10)
#          got: '2'
#     expected: '4'
ok 3
ok 4 - это тест 4
not ok 5 - test 5 should look good too
not ok 6 # TODO: тест 6 планируется реализовать в будущем 
ok 7 # skip этот тест пропускается
ok 8 # skip этот тест пропускается
ok 9 # skip этот тест пропускается
END_HERE

Теперь запустите через prove (см. "Выполнение тестов" ):

$ prove sample_output.pl
samplesample_output.pl .. Failed 2/9 subtests
    (less 3 skipped subtests: 4 okay)
 
Test Summary Report
-------------------
samplesample_output.pl (Wstat: 0 Tests: 9 Failed: 2)    #[1]
  Failed tests:  2, 5                                   #[2]
Files=1, Tests=9,  0 wallclock secs 
    ( 0.03 usr +  0.01 sys =  0.04 CPU)                 #[3]
Result: FAIL                                            #[4]

Скрипт отработал и вывел результат в формате TAP, точно так же, как если бы это был тестовый скрипт. Вывод скрипта затем был обработан утилитой prove, в итоге мы видим общий отчет по результатам.

#[1] - всего тестов - 9, из них 2 неудачны

#[2] - неудачные тесты под номерами 2 и 5

#[3] - в тестах участвовал один тестовый файл, 9 тестов, затрачено процессорного времени 0.04 сек.

#[4] - Общий результат - неудача (FAILURE)

В отчете также упоминается о трех пропущенных тестах. Пропущены тесты под номерами 7,8,9, каждый из них содержит метку #skip. Они считаются успешными (об этом будет обсуждаться в следующий раз).

Остается любопытная строка, тест 6. Она начинается с 'not ok', но тест не считается неудачным, поскольку там же указана метка #TODO. ( этот случай рассмотрим позже, в одном из следующих постов.)

Все остальное содержимое вывода игнорируется, которое состоит из диагностических сообщений, добавленных разработчиком. При разработке бывает полезно посмотреть на вывод теста в целом, будь то с помощью prove -v или непосредственным выполнением скрипта perl. (см. "Выполнение тестов" ).

Что происходит, когда фактическое число тестов отличается, от того, что ожидалось? Запуск несоответствующего числа тестов расценивается как ошибка. Сохраните следующий код теста в файле few_tests.t:

use Test::More tests => 3;
pass( 'one test'  );
pass( 'two tests' );

Запустим его командой prove:

$ prove few_tests.t 
few_tests.t .. 1/3 # Looks like you planned 3 tests but ran 2.
few_tests.t .. Dubious, test returned 255 (wstat 65280, 0xff00)
Failed 1/3 subtests 

Test Summary Report
-------------------
few_tests.t (Wstat: 65280 Tests: 2 Failed: 0)
  Non-zero exit status: 255
  Parse errors: Bad plan.  You planned 3 tests but ran 2.
Files=1, Tests=2,  0 wallclock secs ( 0.07 usr  0.02 sys +  0.05 cusr  0.01 csys =  0.15 CPU)
Result: FAIL

Test::More сообщает, что фактическое число выполненных тестов отлично от указанного числа.

Сохраните следующий код в файле too_many_tests.t:

use Test::More tests => 2;

pass( 'one test'    );
pass( 'two tests'   );
pass( 'three tests' );

Запустите его командой prove:

$ prove few_many_tests.t 
few_many_tests.t .. 1/2 # Looks like you planned 2 tests but ran 3.
few_many_tests.t .. Dubious, test returned 255 (wstat 65280, 0xff00)
All 2 subtests passed 

Test Summary Report
-------------------
few_many_tests.t (Wstat: 65280 Tests: 3 Failed: 1)
  Failed test:  3
  Non-zero exit status: 255
  Parse errors: Bad plan.  You planned 2 tests but ran 3.
Files=1, Tests=3,  0 wallclock secs ( 0.04 usr  0.00 sys +  0.02 cusr  0.01 csys =  0.07 CPU)
Result: FAIL

В результате мы видим, что третий тест расценивается как ошибка, Test::More снова сообщил о несоответствии указанного числа тестов с фактическим.

Statistic

About this Archive

This page is an archive of entries from April 2010 listed from newest to oldest.

March 2010 is the previous archive.

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