Курс языка программирования Raku / Продвинутый уровень / Тестирование и документация 🆕 / Тестирование

Сравнения и планы

Помимо ok и is, модуль Test содержит функции сравнения для различных типов значений. Наиболее полезные из них:

  • is — сравнивает два значения на равенство (как строки/числа)
  • is-deeply — сравнивает две структуры данных на точное, типизированное равенство
  • like — проверяет, что строка соответствует регулярному выражению
  • isnt — проходит, когда два значения не равны

is-deeply — правильный выбор для массивов, хэшей и вложенных данных, потому что он точно сравнивает структуру и типы:

use Test;

my @reversed = (1, 2, 3).reverse;
is-deeply @reversed, [3, 2, 1], 'reversed';

done-testing;

Вывод:

ok 1 - reversed
1..1

Там, где is привёл бы значения к строкам и сравнил бы нестрого, is-deeply настаивает на точном совпадении структур. Обратите внимание, что done-testing помещает план 1..1 в конец, после проверки.

Вместо того чтобы позволять done-testing подсчитывать тесты за вас, можно указать их количество заранее с помощью plan. Это защищает от ситуации, когда тестовый файл завершается раньше времени и молча пропускает проверки:

use Test;

plan 2;
ok True,  'first';
ok 1 < 2, 'second';

На этот раз план стоит первым, перед результатами:

1..2
ok 1 - first
ok 2 - second

В этом видимое отличие от done-testing: plan выводит количество 1..2 в начале, до выполнения проверок, тогда как done-testing выводит его в самом конце. В обоих случаях при plan 2 ожидается ровно два теста; если выполнится меньше (или больше), набор тестов будет считаться неудачным. Используйте plan, когда количество фиксировано и известно, а done-testing — когда проще позволить фреймворку подсчитать.

Навигация по курсу

Тест — Тестирование   |   Запуск тестов


💪 Или перейдите сразу к упражнениям этого раздела.