Как отдельные модули, так и продукт в целом, тестируются по одному принципу — непосредственное сравнение для каждого элемента продукта предусмотренной реакции («события») на возможное воздействие («сообщение»).
Для автоматизации тестирования модулей используется универсальный тестирующий модуль — Тестер. Он может использоваться для тестирования любого модуля, в том числе и себя самого.
Тестирование выполняется посредством приема и отправки сообщений.
При этом тестируемый модуль находится в тестовом окружении, когда вместо реальных модулей с ним по протоколу «общается» проверяющий модуль. Само тестирование строится по принципу отправки модулю каких-то сообщений команд и контроле получаемой реакции модуля.
Какие сообщения отправляются тестируемому модулю и какой должна быть его ожидаемая реакция определяется в скрипте тестирования.
Скрипт тестирования — текстовый файл, написанный на специально разработанном в Uniteller структурированном языке TSL (Test Script Language). Обычно каждый скрипт соответствует отдельному пункту в чек-листе и соответственно отдельному сценарию поведения модуля.
Любой скрипт тестирования состоит из трех секций:
Секция Modules имеет следующий формат:
Modules Alias : имя_модуля [Generation : поколение_модуля]
где:
Секция Script имеет следующий формат:
Script Номер_шага : Команда [параметры команды] [доп. ключи команды]
где:
Секция Script обязательна в каждом скрипте тестирования.
Для отправки сообщения из скрипта модулю-получателю используется инструкция Send. Она имеет следующий формат:
# : Send[: ][, Пауза] Имя_события : Поколение [Параметр1 : Значение1] [...] [ПараметрX : ЗначениеX]
где:
Если какой-то параметр отправляемого события не будет указан, то ему будет присвоено значение по умолчанию (если такое определено в протоколе) или значение по умолчанию для данного типа: пустая строка, 0 или false.
Инструкция Receive инициирует приём от заданного модуля определённого события и возможность контроля его параметров. Она имеет следующий формат:
# : Receive[, Время_ожидания] Имя_события : Поколение [Параметр1 : Значение1] [...] [ПараметрX : ЗначениеX]
где:
Выполняется мягкое сравнение принятого события с ожидаемым, то есть, необязательно указывать все параметры ожидаемого события – только те, которые интересуют. Если принимаемое значение неизвестно, но наличие параметра необходимо проверить, то вместо значения можно указать «*».