Удаление тестовых данных
При использовании тестовых данных нередко необходимо удалять созданны е объекты.
Для этого вы можете использовать
Автоматические транзакции
Самый простой в способ отката изменений сделанных тестом - обернуть тест в транзакцию.
Для того чтобы YAxUnit сам оборачивал тесты в транзакции вам, при регистрации теста, нужно вызвать метод ВТранзакции()
.
- Если метод вызвать в самом начале, то настройка примениться для всех тестов модуля;
- если после добавления набора, то для всех тестов этого набора;
- если после добавления теста, то только для этого теста.
- Также можно отключать использование транзакции, указав параметр
ВТранзакции(Ложь)
ЮТТесты
.ДобавитьТест("Фикция").ВТранзакции() // Использование транзакции для конкретного теста
;
ЮТТесты
.ДобавитьТестовыйНабор("Основной").ВТранзакции() // Использование транзакции для набора тестов
.ДобавитьТест("Фикция")
;
ЮТТесты.ВТранзакции() // Использование транзакции для тестов модуля
.ДобавитьТест("Фикция")
;
И тогда тестовый движок будет оборачивать в транзакцию каждый серверный тест (для клиентских будет игнорироваться)
Особенности работы:
- В транзакцию оборачивается только тест и события
ПередКаждымТестом\ПередТестом
иПослеКаждогоТеста\ПослеТеста
- Для клиентских тестов настройка игнорируется
Схема работы транзакций
Для настройки
ЮТТесты
.ДобавитьТестовыйНабор("Основной").ВТранзакции()
.ДобавитьТест("Тест1")
.ДобавитьТест("Тест2")
Схема выполнения будет выглядеть так:
Точно также она будет выглядеть и для настройки
ЮТТесты.ВТранзакции()
.ДобавитьТестовыйНабор("Основной")
.ДобавитьТест("Тест1")
.ДобавитьТест("Тест2")
В транзакцию оборачивается тест, а не модуль или набор, поэтому данные созданные вне теста не будут удалены. Такие данные необходимо удалять самостоятельно при необходимости.
Например, настройка
ЮТТесты
.ДобавитьТестовыйНабор("Основной").ВТранзакции() // Использование транзакции для набора тестов
указывает, что каждый тест набор будет выполняться в своей транзакции, которая будет отменена по окончании каждого теста.
Механизм удаления тестовых данных
В некоторых ситуация тестирование в транзакции невозможно:
- Клиентский тест
- Тестируемый метод не рассчитан на работу в транзакции (например, используются внутренние транзакции)
- Необходимо создавать данные за рамками теста (общие параметры)
В подобных случаях, для удаления созданных данных, может подойти механизм удаления тестовых данных.
Для его включения нужно при регистрации теста вызвать метод УдалениеТестовыхДанных()
.
- Данные созданы не через API
- Данные создаются внутри тестируемого кода
- Данные созданы в клиентском модуле через вызов своего серверного модуля, даже если он использует API тестового движка
ЮТТесты
.ДобавитьТест("Фикция").УдалениеТестовыхДанных() // Использование для конкретного теста
ЮТТесты
.ДобавитьТестовыйНабор("Основной").УдалениеТестовыхДанных() // Использование для всех тестов набора
.ДобавитьТест("Фикция")
ЮТТесты.УдалениеТестовыхДанных() // Использование для всех тестов модуля
.ДобавитьТест("Фикция")
ЮТТесты.ВТранзакции().УдалениеТестовыхДанных() // Совместно с транзакцией
.ДобавитьТест("Фикция")
Механизм не использует транзакции, а запоминает в контексте все созданные с помощью API объекты и записи регистров сведений. Позволяет:
- Удалять данные созданные с клиента
- Удалять данные созданные вне теста (в обработчиках событий)
Механизм только удаляет созданные объекты, изменения не откатываются
Механизм понимает в рамках какого контекста исполнения (тест, набор, модуль) были созданы данные и удаляет их по выходу из него.
Рассмотрим время жизни объектов созданных на разных этапах тестирования, например имеем такой модуль.
Процедура ПередВсемиТестами() Экспорт
ДанныеМодуля = ЮТест.Данные().СоздатьЭлемент();
КонецПроцедуры
Процедура ПередТестовымНабором() Экспорт
ДанныеНабора = ЮТест.Данные().СоздатьЭлемент();
КонецПроцедуры
Процедура ПослеВсехТестов() Экспорт
ДанныеТеста = ЮТест.Данные().СоздатьЭлемент();
КонецПроцедуры
Процедура Тест() Экспорт
Ссылка = ЮТест.Данные().СоздатьЭлемент();
КонецПроцедуры
Для переменных получим разное время жизни
ДанныеМодуля
- Живет, пока исполняются тесты модуля одного контекста (Сервер, Клиент).ДанныеНабора
- Живет, пока исполняются тесты набора.ДанныеТеста
иСсылка
- Живут, пока исполняется тест.