From f8fe7e0d6679a0e5d81963f735af3dcc712732dd Mon Sep 17 00:00:00 2001 From: alkoleft Date: Sun, 14 May 2023 01:27:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user-api/test-data/test-data-deletion.md | 96 +++++++++++++++++++ .../user-api/{ => test-data}/test-data.md | 3 +- 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 documentation/docs/user-api/test-data/test-data-deletion.md rename documentation/docs/user-api/{ => test-data}/test-data.md (98%) diff --git a/documentation/docs/user-api/test-data/test-data-deletion.md b/documentation/docs/user-api/test-data/test-data-deletion.md new file mode 100644 index 00000000..27bf3f94 --- /dev/null +++ b/documentation/docs/user-api/test-data/test-data-deletion.md @@ -0,0 +1,96 @@ +--- +tags: [Getting started, Test data] +--- + +# Удаление тестовых данных + +При использовании тестовых данных нередко необходимо удалять созданные объекты. + +Для этого вы можете использовать + +## Автоматические транзакции + +Для включения нужно при регистрации теста вызвать метод `ВТранзакции()` + +```bsl title=ВТранзакции.bsl +ЮТТесты + .ДобавитьТест("Фикция").ВТранзакции() // Использование транзакции для конкретного теста + +ЮТТесты + .ДобавитьТестовыйНабор("Основной).ВТранзакции() // Использование транзакции для набора тестов + .ДобавитьТест("Фикция") + +ЮТТесты.ВТранзакции() // Использование транзакции для тестов модуля + .ДобавитьТест("Фикция") + +``` + +И тогда тестовый движок будет оборачивать в транзакцию каждый серверный тест (для клиентских будет игнорироваться) + +:::caution Учитывайте +В транзакцию оборачивается тест, а не модуль или набор, поэтому данные созданные вне теста не будут удалены. +Такие данные необходимо удалять самостоятельно при необходимости. +::: + +## Механизма удаления тестовых данных + +Для включения нужно при регистрации теста вызвать метод `УдалениеТестовыхДанных()` + +```bsl title=УдалениеТестовыхДанных.bsl +ЮТТесты + .ДобавитьТест("Фикция").УдалениеТестовыхДанных() // Использование для конкретного теста + +ЮТТесты + .ДобавитьТестовыйНабор("Основной).УдалениеТестовыхДанных() // Использование для всех тестов набора + .ДобавитьТест("Фикция") + +ЮТТесты.УдалениеТестовыхДанных() // Использование для всех тестов модуля + .ДобавитьТест("Фикция") + +ЮТТесты.ВТранзакции().УдалениеТестовыхДанных() // Совместно с транзакцией + .ДобавитьТест("Фикция") + +``` + +Механизм не используется транзакции, а запоминает в контексте все созданные с помощью API объекты и записи регистров сведений. +Позволяет: + +* Удалять данные созданные с клиента +* Удалять данные созданные вне теста (в обработчиках событий) + +:::tip +Механизм понимает в рамках какого контекста исполнения (тест, набор, модуль) были созданы данные и удаляет их по выходу из него. +::: + +Рассмотрим время жизни объектов созданных на разных этапах тестирования, например имеем такой модуль. + +```bsl title=УдалениеТестовыхДанныхВремяЖизни.bsl +Процедура ПередВсемиТестами() Экспорт + ДанныеМодуля = ЮТест.Данные().СоздатьЭлемент(); // Не будет удалена +КонецПроцедуры + +Процедура ПередТестовымНабором() Экспорт + ДанныеНабора = ЮТест.Данные().СоздатьЭлемент(); +КонецПроцедуры + +Процедура ПослеВсехТестов() Экспорт + ДанныеТеста = ЮТест.Данные().СоздатьЭлемент(); +КонецПроцедуры + +Процедура Тест() Экспорт + Ссылка = ЮТест.Данные().СоздатьЭлемент(); +КонецПроцедуры +``` + +Для переменных получим разное время жизни + +* `ДанныеМодуля` - Не будет удалена, проблема будет решена в ближайшем будущем. +* `ДанныеНабора` - Живет, пока исполняются тесты набора. +* `ДанныеТеста` и `Ссылка`- Живут, пока исполняется тест. + +:::caution Механизм имеет ряд ограничений и не работает для следующих кейсов: + +* Данные создан не через API +* Данные созданы в событии "ПередВсемиТестами" (работает для "ПередТестовымНабором") +* Данные созданы в клиентском модуле через вызов своего серверного модуля, даже если он использует API тестового движка +::: diff --git a/documentation/docs/user-api/test-data.md b/documentation/docs/user-api/test-data/test-data.md similarity index 98% rename from documentation/docs/user-api/test-data.md rename to documentation/docs/user-api/test-data/test-data.md index 8e26512f..0b0776ff 100644 --- a/documentation/docs/user-api/test-data.md +++ b/documentation/docs/user-api/test-data/test-data.md @@ -22,12 +22,13 @@ tags: [Getting started, Test data] Если грамотно распределить тестовые данные на способы создания, мы можем добиться оптимального результата. Например, можно статичные данные создать вручную, сложные кейсы данных засунуть в макеты, а для программного создания реализовать методы-конструкторы, которые будем переиспользовать. Таким образом, сможем уйти от минусов данного подхода или минимизировать их вред. -В текущей версии тестовый движок предоставляет api для программного создания тестовых данных. За это отвечает общий модуль `ЮТТестовыеДанные`, к которому можно обратиться через метод `ЮТест.Данные`. +В текущей версии тестовый движок предоставляет api для программного создания тестовых данных. За это отвечает общий модуль `ЮТТестовыеДанные`, к которому можно обратиться через метод `ЮТест.Данные()`. Сейчас это минимальный набор методов, который в дальнейшем будет развиваться. Он позволяет: * Создавать данные информационной базы * Генерировать случайные значения +* Автоматически удалять созданные данные (для этого необходимо включить настройку теста `УдалениеТестовыхДанных()`) * Работать с файлами * Использовать таблицы markdown в качестве макетов данных