Модуль tap
Модуль tap упрощает тестирование других модулей. Он позволяет писать
тесты с использованием
TAP-протокола.
Результаты тестов могут быть обработаны стандартными TAP-анализаторами и
переданы таким утилитам, как
prove.
Таким образом, можно запускать тесты и использовать их результаты для
сбора статистики, принятия решений и т. д.
Ниже приведен перечень функций и объектов модуля tap.
Имя | Назначение |
|---|---|
Инициализация | |
Создание подтеста и вывод результатов | |
Указание количества выполняемых тестов | |
Проверка количества выполненных тестов | |
Вывод диагностического сообщения | |
Вычисление условия и вывод сообщения | |
Вычисление условия и вывод сообщения | |
Вычисление условия и вывод сообщения | |
Проверка равенства двух аргументов | |
Проверка неравенства двух аргументов | |
Рекурсивная проверка равенства двух аргументов | |
Проверка соответствия аргумента шаблону | |
Проверка несоответствия аргумента шаблону | |
taptest:isnil() taptest:isstring() taptest:isnumber() taptest:istable() taptest:isboolean() taptest:isudata() taptest:iscdata() | Проверка принадлежности значения к определенному типу |
Флаг: |
Инициализация.
Результатом tap.test является объект, который будет называться taptest
в ходе данного разбора, что необходимо для taptest:plan() и всех
остальных методов.
Параметры:
test-name(string) — произвольное имя для выводимых результатов теста
Возвращает
taptest
Тип возвращаемого значения
table
Пример:
tap = require('tap')taptest = tap.test('test-name')
Создание подтеста (если не указан аргумент func) или (если указаны все
аргументы) создание подтеста, выполнение тестовой функции и вывод
результата.
См. пример.
Параметры:
test-name(string) — произвольное имя для выводимых результатов тестаfunc(function) — тестовая логика для выполнения
Возвращает
taptest
Тип возвращаемого значения
userdata or string
Указание количества проводимых тестов.
Параметры:
count(number) — количество тестов
Возвращает
nil
Проверка количества выполненных тестов.
Выведенный результат будет включать в себя сообщение: # bad plan: ...,
если количество выполненных тестов не равно количеству тестов,
указанному в taptest:plan(...). (Это собственная функция Tarantool:
сообщения типа "bad plan" не входят в стандарт TAP13.)
Такую проверку следует проводить только по завершении всех
запланированных тестов, поэтому, как правило, taptest:check() появится
лишь в конце скрипта. Тем не менее в качестве расширения Tarantool,
taptest:check() может появиться в начале любого подтеста. Таким
образом, проверка появится в трех случаях:
- при вызове
taptest:check()в конце скрипта, - при вызове функции, которая завершается вызовом
taptest:check(), - или при вызове taptest:test('...', subtest-function-name), где
subtest-function-name не должна завершаться вызовом
taptest:check(), так как он может быть вызван после завершения подтеста.
Возвращает
true или false
Тип возвращаемого значения
boolean
Отображение сообщения диагностики.
Параметры:
message(string) — отображаемое сообщение
Возвращает
nil
Это базовая функция, которая используется другими функциями. В
зависимости от условия condition, выводится 'ok' или 'not ok'
вместе с отладочной информацией. Отображается сообщение.
Параметры:
condition(boolean) — выражение, принимающее значение true или falsetest-name(string) — имя теста
Возвращает
true или false
Тип возвращаемого значения
boolean
Пример:
tarantool> tap = require('tap')---...tarantool> taptest = tap.test('test-name')TAP version 13---...tarantool> taptest:ok(1 + 1 == 2, 'X')ok - X---- true...
taptest:fail('x') – аналог taptest:ok(false, 'x'). Отображается
сообщение.
Параметры:
test-name(string) — имя теста
Возвращает
true или false
Тип возвращаемого значения
boolean
taptest:skip('x') – аналог taptest:ok(true, 'x' .. '# skip').
Отображается сообщение.
Параметры:
message(string) — отображаемое сообщение
Возвращает
nil
Пример:
tarantool> taptest:skip('message')ok - message # skip---- true...
Проверка равенства первого аргумента второму аргументу. Отображается подробное сообщение, если результатом будет false (ложь).
Параметры:
got(number) — фактический результатexpected(number) — ожидаемый результатtest-name(string) — имя теста
Возвращает
true или false
Тип возвращаемого значения
boolean
Отрицание taptest:is().
Параметры:
got(number) — фактический результатexpected(number) — ожидаемый результатtest-name(string) — имя теста
Возвращает
true или false
Тип возвращаемого значения
boolean
Рекурсивная версия taptest:is(...), которую можно использовать для
сравнения как таблиц, так и скалярных значений.
Параметры:
got(lua-value) — фактический результатexpected(lua-value) — ожидаемый результатtest-name(string) — имя теста
Возвращает
true или false
Тип возвращаемого значения
boolean
Проверка совпадения строки с шаблоном. Ok, если найдено совпадение.
Параметры:
got(lua-value) — фактический результатexpected(lua-value) — шаблонtest-name(string) — имя теста
Возвращает
true или false
Тип возвращаемого значения
boolean
Пример:
test:like(tarantool.version, '^[1-9]', "version")
Отрицание taptest:like().
Параметры:
got(number) — фактический результатexpected(number) — шаблонtest-name(string) — имя теста
Возвращает
true или false
Тип возвращаемого значения
boolean
Проверка соответствия значения определенному типу. Отображается длинное сообщение, если значение не принадлежит указанному типу.
Параметры:
value(lua-value) — значение, тип которого проверяетсяutype(string) — тип данных, которому должно соответствовать переданное значение (дляtaptest:isudata())ctype(string) — тип данных, которому должно соответствовать переданное значение (дляtaptest:iscdata())message(string) — текст, который будет показан пользователю в случае ошибки
Возвращает
true или false
Тип возвращаемого значения
boolean
Пример:
test:iscdata(slab_info.quota_size, ffi.typeof('uint64_t'),'memcached.slab.info().quota_size returns a cdata')
Установите taptest.strict = true, если taptest:is(),
taptest:isnt() и taptest:is_deeply()
должны строго сравнивать значения со значением nil. Установите
taptest.strict = false, если nil и box.NULL должны
интерпретироваться одинаково.
По умолчанию – false. Например, taptest:is_deeply({a = box.NULL}, {})
вернет false тогда и только тогда, когда задано taptest.strict = true.
Начиная с версии 2.8.3 значение taptest.strict наследуется во всех
подтестах:
t = require('tap').test('123')t.strict = truet:is_deeply({a = box.NULL}, {}) -- falset:test('subtest', function(t)t:is_deeply({a = box.NULL}, {}) -- тоже falseend)
Для выполнения данного примера поместите скрипт в файл под названием
./tap.lua, затем сделайте tap.lua выполняемым файлом с помощью команды
chmod a+x ./tap.lua, а затем выполните его, используя Tarantool в
качестве обработчика скриптов после выполнения команды ./tap.lua.
#!/usr/bin/tarantoollocal tap = require('tap')test = tap.test("my test name")test:plan(2)test:ok(2 * 2 == 4, "2 * 2 is 4")test:test("some subtests for test2", function(test)test:plan(2)test:is(2 + 2, 4, "2 + 2 is 4")test:isnt(2 + 3, 4, "2 + 3 is not 4")end)test:check()
Результатом вышеприведенного скрипта будет примерно следующее:
TAP version 131..2ok - 2 * 2 is 4# Some subtests for test21..2ok - 2 + 2 is 4,ok - 2 + 3 is not 4# Some subtests for test2: endok - some subtests for test2