diff --git a/documentation/docs/user-api/test-data/test-data-deletion.md b/documentation/docs/user-api/test-data/test-data-deletion.md index 27bf3f94..f2282dd4 100644 --- a/documentation/docs/user-api/test-data/test-data-deletion.md +++ b/documentation/docs/user-api/test-data/test-data-deletion.md @@ -32,7 +32,7 @@ tags: [Getting started, Test data] Такие данные необходимо удалять самостоятельно при необходимости. ::: -## Механизма удаления тестовых данных +## Механизм удаления тестовых данных Для включения нужно при регистрации теста вызвать метод `УдалениеТестовыхДанных()` @@ -58,7 +58,11 @@ tags: [Getting started, Test data] * Удалять данные созданные с клиента * Удалять данные созданные вне теста (в обработчиках событий) -:::tip +:::caution Удаление и только +Механизм только удаляет созданные объекты, изменения не откатываются +::: + +:::tip Разное время жизни данных Механизм понимает в рамках какого контекста исполнения (тест, набор, модуль) были созданы данные и удаляет их по выходу из него. ::: @@ -66,7 +70,7 @@ tags: [Getting started, Test data] ```bsl title=УдалениеТестовыхДанныхВремяЖизни.bsl Процедура ПередВсемиТестами() Экспорт - ДанныеМодуля = ЮТест.Данные().СоздатьЭлемент(); // Не будет удалена + ДанныеМодуля = ЮТест.Данные().СоздатьЭлемент(); КонецПроцедуры Процедура ПередТестовымНабором() Экспорт @@ -84,13 +88,12 @@ tags: [Getting started, Test data] Для переменных получим разное время жизни -* `ДанныеМодуля` - Не будет удалена, проблема будет решена в ближайшем будущем. +* `ДанныеМодуля` - Живет, пока исполняются тесты модуля одного контекста (Сервер, Клиент). * `ДанныеНабора` - Живет, пока исполняются тесты набора. -* `ДанныеТеста` и `Ссылка`- Живут, пока исполняется тест. +* `ДанныеТеста` и `Ссылка` - Живут, пока исполняется тест. :::caution Механизм имеет ряд ограничений и не работает для следующих кейсов: * Данные создан не через API -* Данные созданы в событии "ПередВсемиТестами" (работает для "ПередТестовымНабором") * Данные созданы в клиентском модуле через вызов своего серверного модуля, даже если он использует API тестового движка ::: diff --git a/exts/yaxunit/src/CommonModules/ЮТНастройкиВыполнения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТНастройкиВыполнения/Module.bsl index 9b4c756a..6a84a3be 100644 --- a/exts/yaxunit/src/CommonModules/ЮТНастройкиВыполнения/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТНастройкиВыполнения/Module.bsl @@ -47,6 +47,10 @@ Значение = КонтекстИсполнения.Набор.НастройкиВыполнения[ИмяНастройки]; + ИначеЕсли КонтекстИсполнения.Модуль <> Неопределено И КонтекстИсполнения.Модуль.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда + + Значение = КонтекстИсполнения.Модуль.НастройкиВыполнения[ИмяНастройки]; + Иначе ГлобальныеНастройки = ЮТКонтекст.ГлобальныеНастройкиВыполнения(); diff --git a/exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl index 5aaf0a74..a608db4e 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТесты/Module.bsl @@ -166,10 +166,10 @@ // Устанавливает настройку удаления созданных тестовых данных // В отличии от использования транзакции: // -// * Умеет работь с данными созданными на клиенте +// * Умеет работать с данными созданными на клиенте // * Только удаляет созданные данные и не откатывает изменения объектов // * Работает с данными созданными через API работы с тестовыми данными -// * Удаляет данные созданные вне теста (в обработчиках событий, например, ПередТестовымНабором) +// * Удаляет данные созданные вне теста (в обработчиках событий, например, ПередВсемиТестами и ПередТестовымНабором) // // Параметры: // УдалятьСозданныеДанные - Булево @@ -367,12 +367,15 @@ // Возвращаемое значение: // Структура - Исполняемые сценарии: // * ТестовыеНаборы - Массив из см. ЮТФабрика.ОписаниеТестовогоНабора - Тестовые наборы модуля +// * НастройкиВыполнения- Структура - Настройки исполнения теста Функция ИсполняемыеСценарии(МетаданныеМодуля) Структура = Новый Структура; Структура.Вставить("ТестовыеНаборы", Новый Массив()); + Структура.Вставить("НастройкиВыполнения", Новый Структура()); Набор = ЮТФабрика.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя); + Набор.НастройкиВыполнения = Структура.НастройкиВыполнения; // Общие настройки с набором по умолчанию Структура.ТестовыеНаборы.Добавить(Набор); Возврат Структура; diff --git a/exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl index 1b5dbe2a..6f92f07c 100644 --- a/exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТФабрика/Module.bsl @@ -198,12 +198,14 @@ // * МетаданныеМодуля - см. ЮТФабрика.ОписаниеМодуля // * НаборыТестов - Массив из см. ЮТФабрика.ОписаниеТестовогоНабора // * Ошибки - Массив из см. ЮТФабрика.ОписаниеВозникшейОшибки +// * НастройкиВыполнения- Структура - Настройки исполнения теста Функция ОписаниеТестовогоМодуля(МетаданныеМодуля, НаборыТестов) Экспорт Описание = Новый Структура; Описание.Вставить("МетаданныеМодуля", МетаданныеМодуля); Описание.Вставить("НаборыТестов", НаборыТестов); Описание.Вставить("Ошибки", Новый Массив); + Описание.Вставить("НастройкиВыполнения", Новый Структура()); Возврат Описание; diff --git a/exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl index df73e297..6eb10086 100644 --- a/exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl @@ -31,16 +31,15 @@ ЮТФильтрация.УстановитьКонтекст(ПараметрыЗапускаТестов); - Для Каждого ОписаниеМодуля Из ТестовыеМодули() Цикл + Для Каждого МетаданныеМодуля Из ТестовыеМодули() Цикл - НаборыТестов = ТестовыеНаборыМодуля(ОписаниеМодуля, ПараметрыЗапускаТестов); + ОписаниеТестовогоМодуля = ТестовыеНаборыМодуля(МетаданныеМодуля, ПараметрыЗапускаТестов); - Если НаборыТестов = Неопределено Тогда + Если ОписаниеТестовогоМодуля = Неопределено Тогда Продолжить; КонецЕсли; - ТестовыйМодуль = ЮТФабрика.ОписаниеТестовогоМодуля(ОписаниеМодуля, НаборыТестов); - Результат.Добавить(ТестовыйМодуль); + Результат.Добавить(ОписаниеТестовогоМодуля); КонецЦикла; @@ -51,17 +50,19 @@ // ПрочитатьНаборТестов // Читает набор тестов из модуля // Параметры: -// ОписаниеМодуля - см. ЮТФабрика.ОписаниеМодуля +// МетаданныеМодуля - см. ЮТФабрика.ОписаниеМодуля // // Возвращаемое значение: -// Неопределено, Массив из см. ЮТФабрика.ОписаниеТестовогоНабора- Если прочитано, то будет возвращено описание наборов -Функция ИсполняемыеСценарииМодуля(ОписаниеМодуля) Экспорт +// - Неопределено - Если это не тестовый модуль +// - см. ЮТФабрика.ОписаниеТестовогоМодуля +Функция ИсполняемыеСценарииМодуля(МетаданныеМодуля) Экспорт ЭтоТестовыйМодуль = Истина; + ОписаниеТестовогоМодуля = ЮТФабрика.ОписаниеТестовогоМодуля(МетаданныеМодуля, Неопределено); - ЮТТесты.ПередЧтениемСценариевМодуля(ОписаниеМодуля); + ЮТТесты.ПередЧтениемСценариевМодуля(МетаданныеМодуля); - ПолноеИмяМетода = ОписаниеМодуля.Имя + "." + ИмяМетодаСценариев(); + ПолноеИмяМетода = МетаданныеМодуля.Имя + "." + ИмяМетодаСценариев(); Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода); Если Ошибка <> Неопределено Тогда @@ -81,26 +82,25 @@ Если Ошибка <> Неопределено Тогда - Данные = Новый Массив(); // Фиксируем, чтобы отобразить в отчете - Описание = ЮТФабрика.ОписаниеТестовогоНабора(ОписаниеМодуля.Имя); - ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуЧтенияТестов(Описание, "Ошибка формирования списка тестовых методов", Ошибка); - - Данные.Добавить(Описание); + НаборПоУмолчанию = ЮТФабрика.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя); + ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуЧтенияТестов(НаборПоУмолчанию, "Ошибка формирования списка тестовых методов", Ошибка); + ОписаниеТестовогоМодуля.НаборыТестов.Добавить(НаборПоУмолчанию); ИначеЕсли ЭтоТестовыйМодуль Тогда ЮТТесты.ПослеЧтенияСценариевМодуля(); Сценарии = ЮТТесты.СценарииМодуля(); - Данные = ЮТФильтрация.ОтфильтроватьТестовыеНаборы(Сценарии.ТестовыеНаборы, ОписаниеМодуля); + ОписаниеТестовогоМодуля.НаборыТестов = ЮТФильтрация.ОтфильтроватьТестовыеНаборы(Сценарии.ТестовыеНаборы, МетаданныеМодуля); + ОписаниеТестовогоМодуля.НастройкиВыполнения = Сценарии.НастройкиВыполнения; Иначе - Данные = Неопределено; + ОписаниеТестовогоМодуля = Неопределено; КонецЕсли; - Возврат Данные; + Возврат ОписаниеТестовогоМодуля; КонецФункции @@ -171,34 +171,46 @@ КонецФункции -Функция ТестовыеНаборыМодуля(Модуль, ПараметрыЗапуска) +Функция ТестовыеНаборыМодуля(МетаданныеМодуля, ПараметрыЗапуска) // TODO Фильтрация по путям - НаборыТестов = Неопределено; + ОписаниеМодуля = Неопределено; #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда - Если Модуль.КлиентОбычноеПриложение ИЛИ Модуль.КлиентУправляемоеПриложение Тогда - НаборыТестов = ИсполняемыеСценарииМодуля(Модуль); - ИначеЕсли Модуль.Сервер Тогда - НаборыТестов = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(Модуль); + Если МетаданныеМодуля.КлиентОбычноеПриложение ИЛИ МетаданныеМодуля.КлиентУправляемоеПриложение Тогда + + ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля); + + ИначеЕсли МетаданныеМодуля.Сервер Тогда + + ОписаниеМодуля = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(МетаданныеМодуля); ЮТЛогирование.ВывестиСерверныеСообщения(); + КонецЕсли; #ИначеЕсли Сервер Тогда - Если Модуль.Сервер Тогда - НаборыТестов = ИсполняемыеСценарииМодуля(Модуль); + Если МетаданныеМодуля.Сервер Тогда + + ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля); + Иначе + ВызватьИсключение "Чтение списка тестов модуля в недоступном контексте"; + КонецЕсли; #ИначеЕсли Клиент Тогда - Если Модуль.КлиентУправляемоеПриложение Тогда - НаборыТестов = ИсполняемыеСценарииМодуля(Модуль); - ИначеЕсли Модуль.Сервер Тогда - НаборыТестов = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(Модуль); + Если МетаданныеМодуля.КлиентУправляемоеПриложение Тогда + + ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля); + + ИначеЕсли МетаданныеМодуля.Сервер Тогда + + ОписаниеМодуля = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(МетаданныеМодуля); ЮТЛогирование.ВывестиСерверныеСообщения(); + КонецЕсли; #КонецЕсли - - Возврат НаборыТестов; + + Возврат ОписаниеМодуля; КонецФункции diff --git a/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl b/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl index 152b4ae4..1afbd12c 100644 --- a/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl @@ -24,7 +24,7 @@ .ВТранзакции() .УдалениеТестовыхДанных() .ДобавитьТест("Удалить") - .ДобавитьТест("СобратьМассивВариантов"); + .ДобавитьТест("ВариантыПараметров"); ; КонецПроцедуры @@ -58,13 +58,13 @@ КонецПроцедуры -Процедура СобратьМассивВариантов() Экспорт +Процедура ВариантыПараметров() Экспорт Ключи = "Числа, Строки"; БазоваяСтруктура = Новый Структура(Ключи); Значения = Новый Структура(Ключи, ЮТОбщий.ЗначениеВМассиве(1, 2), ЮТОбщий.ЗначениеВМассиве("1", "2")); - Результат = ЮТест.Данные().СобратьМассивВариантов(БазоваяСтруктура, Значения); + Результат = ЮТест.Данные().ВариантыПараметров(БазоваяСтруктура, Значения); ЮТест.ОжидаетЧто(Результат) .ИмеетТип("Массив") diff --git a/tests/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/Module.bsl b/tests/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/Module.bsl index 2d0af530..b137b683 100644 --- a/tests/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/Module.bsl @@ -107,6 +107,7 @@ Ссылки = Новый Структура("Набор, Тест"); ЮТест.Контекст().УстановитьЗначение("Ссылки", Ссылки); + СоздатьСсылку("Модуль", "Модуль"); // Если данные созданные в этом событии не удаляются то прогон в другом контексте долже упасть (на сервере) КонецПроцедуры diff --git a/tests/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl b/tests/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl index fb55ef37..2816016a 100644 --- a/tests/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl @@ -108,15 +108,17 @@ МетаданныеМодуля.Вставить("ВызовСервера", Ложь); ЮТФильтрация.УстановитьКонтекст(Новый Структура("filter", Новый Структура)); - Сценарии = ЮТЧитатель.ИсполняемыеСценарииМодуля(МетаданныеМодуля); + ОписаниеМодуля = ЮТЧитатель.ИсполняемыеСценарииМодуля(МетаданныеМодуля); - ЮТест.ОжидаетЧто(Сценарии, "Сценарии") - .ИмеетТип("Массив") + ЮТест.ОжидаетЧто(ОписаниеМодуля, "ОписаниеМодуля") + .ИмеетТип("Структура") + .Свойство("НаборыТестов") .ИмеетДлину(3) - .Элемент(0).ИмеетТип("Структура") - .Элемент(1).ИмеетТип("Структура") - .Элемент(2).ИмеетТип("Структура") + .Элемент("НаборыТестов[0]").ИмеетТип("Структура") + .Элемент("НаборыТестов[1]").ИмеетТип("Структура") + .Элемент("НаборыТестов[2]").ИмеетТип("Структура") ; + Сценарии = ОписаниеМодуля.НаборыТестов; НаборПоУмолчанию = Сценарии[0]; НаборЭтоТестовыйМодуль = Сценарии[1];