Версия:

Модуль tap

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

Checks the number of tests performed.

The result will be a display saying # bad plan: ... if the number of completed tests is not equal to the number of tests specified by taptest:plan(...). (This is a purely Tarantool feature: «bad plan» messages are out of the TAP13 standard.)

This check should only be done after all planned tests are complete, so ordinarily taptest:check() will only appear at the end of a script. However, as a Tarantool extension, taptest:check() may appear at the end of any subtest. Therefore there are three ways to cause the check:

  • by calling taptest:check() at the end of a script,
  • by calling a function which ends with a call to taptest:check(),
  • or by calling taptest:test(„…“, subtest-function-name) where subtest-function-name does not need to end with taptest:check() because it can be called after the subtest is complete.
возвращается: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