Модуль tap
Модуль tap
оптимизирует тестирование других модулей. Он позволяет записывать тесты в TAP-протокол (TAP protocol). Результаты тестов могут подвергаться анализу стандартными TAP-анализаторами, поэтому их можно передавать утилитам, например prove. Таким образом, можно выполнять тестирование, а затем использовать результаты для выведения статистики, принятия решений и т.д.
Ниже приведен перечень всех функций модуля tap
.
Имя | Назначение |
---|---|
tap.test() | Инициализация |
taptest:test() | Создание подтеста и вывод результатов |
taptest:plan() | Указание количества проводимых тестов |
taptest:check() | Проверка количества выполненных тестов |
taptest:diag() | Отображение сообщения диагностики |
taptest:ok() | Оценка состояния и отображение сообщения |
taptest:fail() | Оценка состояния и отображение сообщения |
taptest:skip() | Оценка состояния и отображение сообщения |
taptest:is() | Проверка равенства двух аргументов |
taptest:isnt() | Проверка отличий двух аргументов |
taptest:is_deeply() | Рекурсивная проверка равенства двух аргументов |
taptest:like() | Проверка соответствия аргумента шаблону |
taptest:unlike() | Проверка отличия аргумента от шаблона |
taptest:isnil() taptest:isstring() taptest:isnumber() taptest:istable() taptest:isboolean() taptest:isudata() taptest:iscdata() |
Проверка соответствия значения определенному типу |
-
tap.
test
(test-name) Инициализация.
Результатом
tap.test
является объект, который будет называться taptest в ходе данного разбора, что необходимо дляtaptest:plan()
и всех остальных методов.Параметры: - test-name (string) – произвольное имя для результата теста.
возвращает: taptest
тип возвращаемого значения: таблица
tap = require('tap') taptest = tap.test('test-name')
-
object
taptest
-
taptest:
test
(test-name, func) Создание подтеста (если не указан аргумент
func
) или (если указаны все аргументы) создание подтеста, выполнение тестовой функции и вывод результата.См. пример.
Параметры: - name (string) – произвольное имя для результата теста.
- fun (function) – выполняемая тестовая логика.
возвращает: taptest
тип возвращаемого значения: userdata или строка
-
taptest:
plan
(count) Указание количества проводимых тестов.
Параметры: - count (number) –
возвращает: nil
-
taptest:
check
() Проверка количества выполненных тестов.
Выведенный результат будет включать в себя сообщение:
# bad plan: ...
, если количество выполненных тестов не равно количеству тестов, указанному вtaptest:plan(...)
. (Это собственная функция Tarantool’а: сообщения типа «bad plan» не входят в стандарт TAP13.)Такую проверку следует проводить только по завершении всех запланированных тестов, поэтому как правило,
taptest:check()
появится лишь в конце скрипта. Тем не менее, в качестве расширения Tarantool’а,taptest:check()
может появиться в начале любого подтеста. Таким образом, проверка появится в трех случаях:- при вызове
taptest:check()
в конце скрипта, - при вызове функции, которая заканчивается вызовом
taptest:check()
, - или при вызове taptest:test(„…“, имя-функции-подтеста), где функция подтеста не обязана заканчиваться на
taptest:check()
, поскольку ее можно вызвать по окончании подтеста.
возвращает: true (правда) или false (ложь). тип возвращаемого значения: boolean (логический) - при вызове
-
taptest:
diag
(message) Отображение сообщения диагностики.
Параметры: - message (string) – отображаемое сообщение.
возвращает: nil
-
taptest:
ok
(condition, test-name) Это базовая функция, которая используется другими функциями. В зависимости от условия
condition
, выводится „ok“ или „not ok“ вместе с отладочной информацией. Отображается сообщение.Параметры: - condition (boolean) – выражение, которое либо true (правда), либо false (ложь)
- test-name (string) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
Пример:
tarantool> taptest:ok(true, 'x') ok - x --- - true ... 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
(test-name) taptest:fail('x')
– аналогtaptest:ok(false, 'x')
. Отображается сообщение.Параметры: - test-name (string) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
-
taptest:
skip
(message) taptest:skip('x')
– аналогtaptest:ok(true, 'x' .. '# skip')
. Отображается сообщение.Параметры: - test-name (string) – имя теста
возвращает: nil
Пример:
tarantool> taptest:skip('message') ok - message # skip --- - true ...
-
taptest:
is
(got, expected, test-name) Проверка равенства первого аргумента второму аргументу. Отображается подробное сообщение, если результатом будет false (ложь).
Параметры: - got (number) – фактический результат
- expected (number) – ожидаемый результат
- test-name (string) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
-
taptest:
isnt
(got, expected, test-name) Отрицание taptest:is().
Параметры: - got (number) – фактический результат
- expected (number) – ожидаемый результат
- test-name (string) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
-
taptest:
is_deeply
(got, expected, test-name) Рекурсивная версия
taptest:is(...)
, которую можно использовать для сопоставления таблиц, а также скалярных значений.возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
Параметры: - got (lua-value) – фактический результат
- expected (lua-value) – ожидаемый результат
- test-name (string) – имя теста
-
taptest:
like
(got, expected, test-name) Проверка совпадения строки с шаблоном. Ok, если найдено совпадение.
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
Параметры: - got (lua-value) – фактический результат
- expected (lua-value) – шаблон
- test-name (string) – имя теста
test:like(tarantool.version, '^[1-9]', "version")
-
taptest:
unlike
(got, expected, test-name) Отрицание taptest:like().
Параметры: - got (number) – фактический результат
- expected (number) – шаблон
- test-name (string) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
-
taptest:
isnil
(value, test-name) -
taptest:
isstring
(value, test-name) -
taptest:
isnumber
(value, test-name) -
taptest:
istable
(value, test-name) -
taptest:
isboolean
(value, test-name) -
taptest:
isudata
(value, test-name) -
taptest:
iscdata
(value, test-name) Проверка соответствия значения определенному типу. Отображается длинное сообщение, если значение не принадлежит указанному типу.
Параметры: - value (lua-value) –
- test-name (string) – имя теста
возвращает: true (правда) или false (ложь).
тип возвращаемого значения: boolean (логический)
-
Для выполнения данного примера поместите скрипт в файл под названием ./tap.lua, затем сделайте tap.lua выполняемым файлом с помощью команды chmod a+x ./tap.lua
, а затем выполните его, используя Tarantool в качестве обработчика скриптов после выполнения команды ./tap.lua.
#!/usr/bin/tarantool
local 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 13
1..2
ok - 2 * 2 is 4
# Some subtests for test2
1..2
ok - 2 + 2 is 4,
ok - 2 + 3 is not 4
# Some subtests for test2: end
ok - some subtests for test2