Skip to content

Создание файлов тестов

Artur Ayukhanov edited this page Apr 3, 2018 · 27 revisions

Создание файлов-тестов

Создаем новую внешнюю обработку, т.н. тестовый набор

В модуле этой обработки размещаются тестовые случаи (экспортные методы без параметров, чье имя может начинаться на Тест (необязательно))

Тестовый случай считается успешно выполненным, если в процессе его выполнения не было исключения.

Соответственно, для того, чтобы тест упал, нужно выбросить исключение 1С. Для этого используются вызовы специальных методов-утверждений из фреймворка xUnitFor1C. См. Методы проверки/утверждений

Примеры тестов:

Предопределенные методы теста

  • Переменная КонтекстЯдра

    • содержит в себе ссылку на экземпляр фреймворка xUnitFor1C - объект обработки xddTestRunner
    • с помощью этой переменной можно использовать предопределенные методы xUnitFor1C. Например, см. Методы проверки/утверждений
    • имя КонтекстЯдра необязательно, можно использовать любое другое имя переменной
    • значение этой переменной должно быть заполнено в методе Инициализация
  • Процедура Инициализация

    • должна инициализировать контекст ядра
    • должна заполнить значение переменной КонтекстЯдра
    • должна заполнить значение переменных других плагинов, например, Ожидаем или Утверждения
    • один входной параметр КонтекстЯдраПараметр - ссылка на экземпляр фреймворка xUnitFor1C - объект обработки xddTestRunner
  • Процедура ЗаполнитьНаборТестов

    • заполняет набор описаний тестовых случаев и тестовых сценариев
    • именно этот набор и является списком выполняемых тестов/сценариев
    • 1-й входной параметр - объект НаборТестов, который используется для добавления тестов в различных режимах.
    • 2-й входной параметр (необязательный) - объект КонтекстЯдра, который можно использовать для дополнительной настройки списка тестов в зависимости от внешних условий.

Смотрите API НаборТестов

  • функция ПолучитьСписокТестов (рекомендуется использование ЗаполнитьНаборТестов)
    • должна вернуть массив описаний тестовых случаев
    • именно этот массив и является списком выполняемых тестов
    • функция без параметров
  • процедура ПередЗапускомТеста (необязательная)

    • вызывается перед запуском каждого теста
  • процедура ПослеЗапускаТеста (необязательная)

    • вызывается после запуска каждого теста
    • метод вызывается независимо от того, успешно прошел тест или упал.

Базовые приемы написания тестов

Для гарантирования независимости тестов (это одно из основных требований к тестам) рекомендуется использовать механизм транзакций.

Перед запуском теста начинаем транзакцию, после выполнения теста транзакция отменяется. В итоге в базе не остается никаких следов тестирования и тесты работают независимо.

Можно использовать следующий шаблон методов теста

Процедура ПередЗапускомТеста() Экспорт
	НачатьТранзакцию();
КонецПроцедуры

Процедура ПослеЗапускаТеста() Экспорт
	Если ТранзакцияАктивна() Тогда
	    ОтменитьТранзакцию();
	КонецЕсли;
КонецПроцедуры

Базовый шаблон файла-теста (серверный тест в модуле обработки)

Перем КонтекстЯдра;
Перем Утверждения;

//{ основная процедура для юнит-тестирования xUnitFor1C
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
	КонтекстЯдра = КонтекстЯдраПараметр;
	Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения");
КонецПроцедуры

Процедура ЗаполнитьНаборТестов(НаборТестов, КонтекстЯдраПараметр) Экспорт
	КонтекстЯдра = КонтекстЯдраПараметр;
	НаборТестов.Добавить("ТестДолжен_СложитьДваИДва");
КонецПроцедуры

//}

//{ Блок юнит-тестов

Процедура ПередЗапускомТеста() Экспорт
	НачатьТранзакцию();
КонецПроцедуры

Процедура ПослеЗапускаТеста() Экспорт
	Если ТранзакцияАктивна() Тогда
	    ОтменитьТранзакцию();
	КонецЕсли;
КонецПроцедуры

Процедура ТестДолжен_СложитьДваИДва() Экспорт
	Утверждения.ПроверитьРавенство(2 + 2, 4, "2 + 2, 4");
КонецПроцедуры

//}

API НаборТестов

  • Функция Добавить(Знач ИмяМетода, Знач Параметры = Неопределено, Знач Представление = "")

    • добавляет тестовый случай в набор тестов
    • ИмяМетода должно указывать на экспортную процедуру из текущего модуля. Количество параметров этой процедуры должно совпадать с количеством параметров из второго параметра Параметры. Если Параметры не заданы, процедура без параметров.
    • Параметры (необязательно) - параметры тестового случая. Задаются только на этапе создания набора тестов. Параметры теста можно задать с помощью метода `ПараметрыТеста'.
    • Представление (необязательно) - представление тестового случая в окне браузера тестов.
  • Процедура НачатьГруппу(Знач ИмяГруппы, Знач СтрогийПорядокВыполнения = Ложь)

    • создать группу тестов. Удобно для выполнения сценариев, т.е. последовательных шагов тестов.
  • Функция ПараметрыТеста(Знач Парам1, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено, Знач Парам5 = Неопределено, Знач Парам6 = Неопределено, Знач Парам7 = Неопределено, Знач Парам8 = Неопределено, Знач Парам9 = Неопределено)

    • возможно задания определенных параметров для тестового случая.
  • Процедура СлучайныйПорядокВыполнения - определяет возмжожность случайного выполнения тестов в группе тестов. Удобно для несвязанных тестов.

  • Процедура СтрогийПорядокВыполнения - определяет возмжожность случайного выполнения тестов в группе тестов. Удобно для сценарных тестов, которые должны выполняться строго последовательно друг за другом.

Использование параметрических тестов

Пример теста:

Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
	НаборТестов.НачатьГруппу("Группа параметризованных тестов со строгим порядком выполнения", Истина);

	НаборТестов.Добавить("ТестДолжен_СохранитьРезультатСложенияВКонтекст", 
НаборТестов.ПараметрыТеста(5, 7), "Тест должен сохранить результат сложения (5 + 7) в контекст");

	Тест = НаборТестов.Добавить("ТестДолжен_СравнитьКонтекстСоСвоимПараметром");
	Тест.Параметры.Добавить(12);
КонецПроцедуры
// { Группа параметризованных тестов со строгим режимом выполнения
Процедура ТестДолжен_СохранитьРезультатСложенияВКонтекст(Знач1, Знач2) Экспорт
	КонтекстЯдра.СохранитьКонтекст(Знач1 + Знач2);
КонецПроцедуры

Процедура ТестДолжен_СравнитьКонтекстСоСвоимПараметром(Результат) Экспорт
	Контекст = КонтекстЯдра.ПолучитьКонтекст();
	Ожидаем.Что(Контекст).Равно(Результат);
КонецПроцедуры
// } Группа параметризованных тестов со строгим режимом выполнения

Пример 1 Код теста xUnitFor1C с параметрами

Пример 2 Код теста xUnitFor1C с параметрами

Clone this wiki locally