- План
- Основные функции модуля
- саб тесты
- Тест ООП
- Модули
- Сложные структуры
- Диагностика
- Разное
- Debugging tests
Здесь главное не начать подгонять код под тесты, чтобы “все работало”. Тогда будет счастье. Ну и не писать бесполезных тестов. justnoxx • 4 года назад
Синтаксис
План
Чтобы вывести кол-во успешных/неуспешных тестов, нужно указать no_plan
в use
use Test::More qw| no_plan |;
В таком случает, модуль сам посчитает
Либо в конце скрипта
use Test::More;
...
done_testing();
Или самому сказать сколько планировалось обработать тестов
use Test::More 'tests' => 2;
Основные функции модуля
ok
ok($got eq $expected, $test_name)
ok проверяет булево значение
use Test::More qw| no_plan |;
ok('Привет' eq 'Привет', 'Проверка строки');
ok( 1 + 1 == 3, '1 + 1 = 3');
$ perl script.pl
ok 1 - Проверка строки
not ok 2 - 1 + 1 = 3
# Failed test '1 + 1 = 3'
# at script.pl line 7.
1..2
# Looks like you failed 1 test of 2.
is, isnt
is ($got eq $expected, $test_name) isnt($got eq $expected, $test_name)
Сравнение на eq и ne
use Test::More qw| no_plan |;
is('Привет', 'Привет', 'Проверка eq');
isnt('Привет', 'Пока', 'Проверка ne');
$ perl script.pl
ok 1 - Проверка eq
ok 2 - Проверка ne
1..2
По сравнению с ok, is и isnt предосталяют подробный отчет
use Test::More qw| no_plan |;
is('test', 'more', 'fail test!!!');
$ perl script.pl
not ok 1 - fail test!!!
# Failed test 'fail test!!!'
# at script.pl line 6.
# got: 'test'
# expected: 'more'
1..1
# Looks like you failed 1 test of 1.
like, unlike
like ($got, qr/expected/, $test_name) unlike($got, qr/expected/, $test_name)
Сравнение по регулярке
use Test::More qw| no_plan |;
like('hello, world!', qr/hell/, 'hell is matched');
$ perl script.pl
ok 1 - hell is matched
1..1
use Test::More qw| no_plan |;
unlike('hello, world!', qr/you/, 'you is not matched');
$ perl script.pl
ok 1 - you is not matched
1..1
cmp_ok
cmp_ok($got, $operator, $expected, $test_name)
Сравнение с переданным оператором
use Test::More qw| no_plan |;
cmp_ok('1', '<', 2, "Test cmp_ok");
$ perl script.pl
ok 1 - Test cmp_ok
1..1
pass, fail
pass($test_name) fail($test_name)
Тест пройден(pass) или не пройден(fail)
Видимо используются для принудительного указания
use Test::More qw| no_plan |;
pass('test 1 ok');
pass('test 2 ok');
fail('test 3 ok');
fail('test 4 ok');
$ perl script.pl
ok 1 - test 1 ok
ok 2 - test 2 ok
not ok 3 - test 3 ok
# Failed test 'test 3 ok'
# at script.pl line 8.
not ok 4 - test 4 ok
# Failed test 'test 4 ok'
# at script.pl line 9.
1..4
# Looks like you failed 2 tests of 4.
саб тесты
subtest "Название теста" => sub {
# Тест
};
Тест ООП
TODO
can_ok
can_ok($module, @methods); can_ok($object, @methods);
isa_ok
Модули
use_ok
require_ok
Сложные структуры
is_deeply
is_deeply($got, $expected, $test_name);
Проверяет структуру
use Test::More qw| no_plan |;
my $got = {
test => [{t => 1, q => 'w'}],
test2 => [{t2 => 1, q1 => 'w'}],
};
my $expected = {
test => { test2 => 2 }
};
is_deeply($got, $expected, "test structure");
$ perl script.pl
not ok 1 - test structure
# Failed test 'test structure'
# at script.pl line 15.
# Structures begin differing at:
# $got->{test} = ARRAY(0x18769c0)
# $expected->{test} = HASH(0x1858f30)
1..1
# Looks like you failed 1 test of 1.
Диагностика
diag
note
Разное
TODO: BLOCK
SKIP: BLOCK
todo_skip
Debugging tests
perl -d -Ilib t/mytest.t