Skip to content

Latest commit

 

History

History
135 lines (97 loc) · 10.3 KB

Сценарные-тесты---сценарии-в-виде-связанных-и-последовательных-шагов.MD

File metadata and controls

135 lines (97 loc) · 10.3 KB

Сценарные тесты в xUnit

Сценарные тесты - это тесты, которые выполняются строго последовательно, начиная от первого шага и завершая последним шагом. Если один из шагов падает, весь сценарий считается упавшим и шаги, следующие за упавшим шагом, не выполняются.

Для реализации подобного поведения шаги/тесты одного сценария объединяем в модуле (модуле обработки или модуле формы) одного файла-обработки тестирования (внешней или встроенной).

  • В одном модуле может быть несколько тестовых сценариев.

  • Тесты всегда будут запускаться в том порядке, который задан при добавлении тестов в методе ЗаполнитьНаборТестов

  • Для добавления нового сценария нужно использовать метод НаборТестов.НачатьГруппу(ПредставлениеГруппы, Истина)

  • Для метода начала тестового сценария нужно использовать первый тест из тест.набора, добавляемый после начала группы (через метод НаборТестов.Добавить(ИмяМетода, Параметры, ПредставлениеМетода = "") или НаборТестов.Добавить(ИмяМетода, ПредставлениеМетода = "")

  • Для метода завершения тестового сценария (например, для освобождения ресурсов) нужно использовать метод ДобавитьДеструктор(ИмяМетода, ПредставлениеМетода = "").

    • обратите внимание, что
      • Деструктор будет вызываться в любом случае.
      • В случае успеха он вызывается как обычный шаг
      • В случае падения на любом из шагов он будет вызван перед завершением работы по сценарию.
      • Если падение происходит в коде самого деструктора, второй раз деструктор не вызывается.

Примеры сценарных тестов

Есть ниже по тексту.

Также можно посмотреть пример сценария для ОФ или пример сценария для УФ

Контекст сценария

Для сценарных тестов становится возможным использование контекста сценария.

Контекст - это произвольные данные для возможности передачи данных между шагами. Рекомендуем использовать коллекцию данных, например, структуру, в качестве значения контекста, в этом случае удобно передавать различные значения.

Два метода работы с контекстом:

  • Процедура КонтекстЯдра.СохранитьКонтекст(НовыйКонтекст)

    • устанавливает новое значение контекста для сценария
    • параметр НовыйКонтекст - значение нового контекста. Тип - произвольный.
  • Функция КонтекстЯдра.ПолучитьКонтекст()

    • возвращает значение контекста сценария

Использование методов работы с контекстом запрещено при использовании несценарных тестов.

Пример простого тестового сценария с использованием контекста

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

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

Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
	
	НаборТестов.НачатьГруппу("Сценарные тесты с вызовом деструктора группы", Истина);
	НаборТестов.Добавить("КонструкторСценария", "Начало сценария");
	НаборТестов.Добавить("ТестДолжен_ПроверитьЖурналВыполнения", "Проверяю журнал выполнения шагов");
	НаборТестов.ДобавитьДеструктор("ДеструкторСценария", "Обязательное завершение сценария");

КонецПроцедуры

// { Сценарный тест
Процедура КонструкторСценария() Экспорт
	ЖурналВыполнения = "КонструкторСценария;";
	КонтекстЯдра.СохранитьКонтекст(ЖурналВыполнения);
КонецПроцедуры

Процедура ТестДолжен_ПроверитьЖурналВыполнения() Экспорт
	ЖурналВыполнения = КонтекстЯдра.ПолучитьКонтекст();
	Ожидаем.Что(ЖурналВыполнения, "ТестДолжен_ПроверитьЖурналВыполнения").Равно("КонструкторСценария;");
	ЖурналВыполнения = ЖурналВыполнения + "ПроверитьЖурналВыполнения;";
	КонтекстЯдра.СохранитьКонтекст(ЖурналВыполнения);
КонецПроцедуры

Процедура ДеструкторСценария() Экспорт
	ЖурналВыполнения = КонтекстЯдра.ПолучитьКонтекст();
	Ожидаем.Что(ЖурналВыполнения, "ДеструкторСценария").Равно("КонструкторСценария;ПроверитьЖурналВыполнения;");
	ЖурналВыполнения = ЖурналВыполнения + "ДеструкторСценария;";
	КонтекстЯдра.СохранитьКонтекст(ЖурналВыполнения);
КонецПроцедуры
// } 

Пример тестового сценария с параметризированными тестами

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

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

Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
	
	НаборТестов.НачатьГруппу("Тестовый сценарий с параметризированными тестами", Истина);
	НаборТестов.Добавить("ТестДолжен_СохранитьРезультатСложенияВКонтекст", НаборТестов.ПараметрыТеста(5, 7), "Тест должен сохранить результат сложения (5 + 7) в контекст");
	Тест = НаборТестов.Добавить("ТестДолжен_СравнитьКонтекстСоСвоимПараметром");
	Тест.Параметры.Добавить(12);
	НаборТестов.ДобавитьДеструктор("ДеструкторСценария", "Обязательное завершение сценария");
КонецПроцедуры

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

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

Процедура ДеструкторСценария() Экспорт
	//Что-то делаем
КонецПроцедуры
// }