-
Notifications
You must be signed in to change notification settings - Fork 126
Создание файлов тестов
Создаем новую внешнюю обработку, т.н. тестовый набор
В модуле этой обработки размещаются тестовые случаи (экспортные методы без параметров, чье имя может начинаться на Тест
(необязательно))
Тестовый случай считается успешно выполненным, если в процессе его выполнения не было исключения.
Соответственно, для того, чтобы тест упал, нужно выбросить исключение 1С. Для этого используются вызовы специальных методов-утверждений из фреймворка xUnitFor1C
. См. Методы проверки/утверждений
-
TODO [пример сценарного теста](пример сценарного теста)
-
и ниже в разделе "Использование параметрических тестов"
-
Переменная
КонтекстЯдра
- содержит в себе ссылку на экземпляр фреймворка
xUnitFor1C
- объект обработкиxddTestRunner
- с помощью этой переменной можно использовать предопределенные методы
xUnitFor1C
. Например, см. Методы проверки/утверждений - имя
КонтекстЯдра
необязательно, можно использовать любое другое имя переменной - значение этой переменной должно быть заполнено в методе
Инициализация
- содержит в себе ссылку на экземпляр фреймворка
-
Процедура
Инициализация
- должна инициализировать контекст ядра
- должна заполнить значение переменной
КонтекстЯдра
- должна заполнить значение переменных других плагинов, например,
Ожидаем
илиУтверждения
- один входной параметр
КонтекстЯдраПараметр
- ссылка на экземпляр фреймворкаxUnitFor1C
- объект обработки xddTestRunner
-
Процедура
ЗаполнитьНаборТестов
- заполняет набор описаний тестовых случаев и тестовых сценариев
- именно этот набор и является списком выполняемых тестов/сценариев
- 1-й входной параметр - объект НаборТестов, который используется для добавления тестов в различных режимах.
- 2-й входной параметр (необязательный) - объект КонтекстЯдра, который можно использовать для дополнительной настройки списка тестов в зависимости от внешних условий.
-
функция
ПолучитьСписокТестов
(рекомендуется использованиеЗаполнитьНаборТестов
)- должна вернуть массив описаний тестовых случаев
- именно этот массив и является списком выполняемых тестов
- функция без параметров
-
процедура
ПередЗапускомТеста
(необязательная)- вызывается перед запуском каждого теста
-
процедура
ПослеЗапускаТеста
(необязательная)- вызывается после запуска каждого теста
- метод вызывается независимо от того, успешно прошел тест или упал.
Для гарантирования независимости тестов (это одно из основных требований к тестам) рекомендуется использовать механизм транзакций.
Перед запуском теста начинаем транзакцию, после выполнения теста транзакция отменяется. В итоге в базе не остается никаких следов тестирования и тесты работают независимо.
Можно использовать следующий шаблон методов теста
Процедура ПередЗапускомТеста() Экспорт
НачатьТранзакцию();
КонецПроцедуры
Процедура ПослеЗапускаТеста() Экспорт
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
КонецПроцедуры
Перем КонтекстЯдра;
Перем Утверждения;
//{ основная процедура для юнит-тестирования xUnitFor1C
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
КонтекстЯдра = КонтекстЯдраПараметр;
Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения");
КонецПроцедуры
Процедура ЗаполнитьНаборТестов(НаборТестов, КонтекстЯдраПараметр) Экспорт
КонтекстЯдра = КонтекстЯдраПараметр;
НаборТестов.Добавить("ТестДолжен_СложитьДваИДва");
КонецПроцедуры
//}
//{ Блок юнит-тестов
Процедура ПередЗапускомТеста() Экспорт
НачатьТранзакцию();
КонецПроцедуры
Процедура ПослеЗапускаТеста() Экспорт
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
КонецПроцедуры
Процедура ТестДолжен_СложитьДваИДва() Экспорт
Утверждения.ПроверитьРавенство(2 + 2, 4, "2 + 2, 4");
КонецПроцедуры
//}
-
Функция
Добавить(Знач ИмяМетода, Знач Параметры = Неопределено, Знач Представление = "")
- добавляет тестовый случай в набор тестов
-
ИмяМетода
должно указывать на экспортную процедуру из текущего модуля. Количество параметров этой процедуры должно совпадать с количеством параметров из второго параметраПараметры
. ЕслиПараметры
не заданы, процедура без параметров. -
Параметры
(необязательно) - параметры тестового случая. Задаются только на этапе создания набора тестов. Параметры теста можно задать с помощью метода `ПараметрыТеста'. -
Представление
(необязательно) - представление тестового случая в окне браузера тестов.
-
Процедура
НачатьГруппу(Знач ИмяГруппы, Знач СтрогийПорядокВыполнения = Ложь)
- создать группу тестов. Удобно для выполнения сценариев, т.е. последовательных шагов тестов.
-
Функция
ПараметрыТеста(Знач Парам1, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено, Знач Парам5 = Неопределено, Знач Парам6 = Неопределено, Знач Парам7 = Неопределено, Знач Парам8 = Неопределено, Знач Парам9 = Неопределено)
- возможно задания определенных параметров для тестового случая.
-
Процедура
СлучайныйПорядокВыполнения
- определяет возмжожность случайного выполнения тестов в группе тестов. Удобно для несвязанных тестов. -
Процедура
СтрогийПорядокВыполнения
- определяет возмжожность случайного выполнения тестов в группе тестов. Удобно для сценарных тестов, которые должны выполняться строго последовательно друг за другом.
Пример теста:
Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
НаборТестов.НачатьГруппу("Группа параметризованных тестов со строгим порядком выполнения", Истина);
НаборТестов.Добавить("ТестДолжен_СохранитьРезультатСложенияВКонтекст",
НаборТестов.ПараметрыТеста(5, 7), "Тест должен сохранить результат сложения (5 + 7) в контекст");
Тест = НаборТестов.Добавить("ТестДолжен_СравнитьКонтекстСоСвоимПараметром");
Тест.Параметры.Добавить(12);
КонецПроцедуры
// { Группа параметризованных тестов со строгим режимом выполнения
Процедура ТестДолжен_СохранитьРезультатСложенияВКонтекст(Знач1, Знач2) Экспорт
КонтекстЯдра.СохранитьКонтекст(Знач1 + Знач2);
КонецПроцедуры
Процедура ТестДолжен_СравнитьКонтекстСоСвоимПараметром(Результат) Экспорт
Контекст = КонтекстЯдра.ПолучитьКонтекст();
Ожидаем.Что(Контекст).Равно(Результат);
КонецПроцедуры
// } Группа параметризованных тестов со строгим режимом выполнения