Модуль 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