1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-03-17 20:48:01 +02:00

Merge pull request #87 from bia-technologies/feature/84

Установка настроек выполнения на уровне модуля
This commit is contained in:
Koryakin Aleksey 2023-05-16 00:18:08 +03:00 committed by GitHub
commit c76adbb0f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 76 additions and 49 deletions

View File

@ -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 тестового движка
:::

View File

@ -47,6 +47,10 @@
Значение = КонтекстИсполнения.Набор.НастройкиВыполнения[ИмяНастройки];
ИначеЕсли КонтекстИсполнения.Модуль <> Неопределено И КонтекстИсполнения.Модуль.НастройкиВыполнения.Свойство(ИмяНастройки) Тогда
Значение = КонтекстИсполнения.Модуль.НастройкиВыполнения[ИмяНастройки];
Иначе
ГлобальныеНастройки = ЮТКонтекст.ГлобальныеНастройкиВыполнения();

View File

@ -166,10 +166,10 @@
// Устанавливает настройку удаления созданных тестовых данных
// В отличии от использования транзакции:
//
// * Умеет работь с данными созданными на клиенте
// * Умеет работать с данными созданными на клиенте
// * Только удаляет созданные данные и не откатывает изменения объектов
// * Работает с данными созданными через API работы с тестовыми данными
// * Удаляет данные созданные вне теста (в обработчиках событий, например, ПередТестовымНабором)
// * Удаляет данные созданные вне теста (в обработчиках событий, например, ПередВсемиТестами и ПередТестовымНабором)
//
// Параметры:
// УдалятьСозданныеДанные - Булево
@ -367,12 +367,15 @@
// Возвращаемое значение:
// Структура - Исполняемые сценарии:
// * ТестовыеНаборы - Массив из см. ЮТФабрика.ОписаниеТестовогоНабора - Тестовые наборы модуля
// * НастройкиВыполнения- Структура - Настройки исполнения теста
Функция ИсполняемыеСценарии(МетаданныеМодуля)
Структура = Новый Структура;
Структура.Вставить("ТестовыеНаборы", Новый Массив());
Структура.Вставить("НастройкиВыполнения", Новый Структура());
Набор = ЮТФабрика.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
Набор.НастройкиВыполнения = Структура.НастройкиВыполнения; // Общие настройки с набором по умолчанию
Структура.ТестовыеНаборы.Добавить(Набор);
Возврат Структура;

View File

@ -198,12 +198,14 @@
// * МетаданныеМодуля - см. ЮТФабрика.ОписаниеМодуля
// * НаборыТестов - Массив из см. ЮТФабрика.ОписаниеТестовогоНабора
// * Ошибки - Массив из см. ЮТФабрика.ОписаниеВозникшейОшибки
// * НастройкиВыполнения- Структура - Настройки исполнения теста
Функция ОписаниеТестовогоМодуля(МетаданныеМодуля, НаборыТестов) Экспорт
Описание = Новый Структура;
Описание.Вставить("МетаданныеМодуля", МетаданныеМодуля);
Описание.Вставить("НаборыТестов", НаборыТестов);
Описание.Вставить("Ошибки", Новый Массив);
Описание.Вставить("НастройкиВыполнения", Новый Структура());
Возврат Описание;

View File

@ -31,16 +31,15 @@
ЮТФильтрация.УстановитьКонтекст(ПараметрыЗапускаТестов);
Для Каждого ОписаниеМодуля Из ТестовыеМодули() Цикл
Для Каждого МетаданныеМодуля Из ТестовыеМодули() Цикл
НаборыТестов = ТестовыеНаборыМодуля(ОписаниеМодуля, ПараметрыЗапускаТестов);
ОписаниеТестовогоМодуля = ТестовыеНаборыМодуля(МетаданныеМодуля, ПараметрыЗапускаТестов);
Если НаборыТестов = Неопределено Тогда
Если ОписаниеТестовогоМодуля = Неопределено Тогда
Продолжить;
КонецЕсли;
ТестовыйМодуль = ЮТФабрика.ОписаниеТестовогоМодуля(ОписаниеМодуля, НаборыТестов);
Результат.Добавить(ТестовыйМодуль);
Результат.Добавить(ОписаниеТестовогоМодуля);
КонецЦикла;
@ -51,17 +50,19 @@
// ПрочитатьНаборТестов
// Читает набор тестов из модуля
// Параметры:
// ОписаниеМодуля - см. ЮТФабрика.ОписаниеМодуля
// МетаданныеМодуля - см. ЮТФабрика.ОписаниеМодуля
//
// Возвращаемое значение:
// Неопределено, Массив из см. ЮТФабрика.ОписаниеТестовогоНабора- Если прочитано, то будет возвращено описание наборов
Функция ИсполняемыеСценарииМодуля(ОписаниеМодуля) Экспорт
// - Неопределено - Если это не тестовый модуль
// - см. ЮТФабрика.ОписаниеТестовогоМодуля
Функция ИсполняемыеСценарииМодуля(МетаданныеМодуля) Экспорт
ЭтоТестовыйМодуль = Истина;
ОписаниеТестовогоМодуля = ЮТФабрика.ОписаниеТестовогоМодуля(МетаданныеМодуля, Неопределено);
ЮТТесты.ПередЧтениемСценариевМодуля(ОписаниеМодуля);
ЮТТесты.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
ПолноеИмяМетода = ОписаниеМодуля.Имя + "." + ИмяМетодаСценариев();
ПолноеИмяМетода = МетаданныеМодуля.Имя + "." + ИмяМетодаСценариев();
Ошибка = ЮТОбщий.ВыполнитьМетод(ПолноеИмяМетода);
Если Ошибка <> Неопределено Тогда
@ -81,26 +82,25 @@
Если Ошибка <> Неопределено Тогда
Данные = Новый Массив(); // Фиксируем, чтобы отобразить в отчете
Описание = ЮТФабрика.ОписаниеТестовогоНабора(ОписаниеМодуля.Имя);
ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуЧтенияТестов(Описание, "Ошибка формирования списка тестовых методов", Ошибка);
Данные.Добавить(Описание);
НаборПоУмолчанию = ЮТФабрика.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
ЮТРегистрацияОшибок.ЗарегистрироватьОшибкуЧтенияТестов(НаборПоУмолчанию, "Ошибка формирования списка тестовых методов", Ошибка);
ОписаниеТестовогоМодуля.НаборыТестов.Добавить(НаборПоУмолчанию);
ИначеЕсли ЭтоТестовыйМодуль Тогда
ЮТТесты.ПослеЧтенияСценариевМодуля();
Сценарии = ЮТТесты.СценарииМодуля();
Данные = ЮТФильтрация.ОтфильтроватьТестовыеНаборы(Сценарии.ТестовыеНаборы, ОписаниеМодуля);
ОписаниеТестовогоМодуля.НаборыТестов = ЮТФильтрация.ОтфильтроватьТестовыеНаборы(Сценарии.ТестовыеНаборы, МетаданныеМодуля);
ОписаниеТестовогоМодуля.НастройкиВыполнения = Сценарии.НастройкиВыполнения;
Иначе
Данные = Неопределено;
ОписаниеТестовогоМодуля = Неопределено;
КонецЕсли;
Возврат Данные;
Возврат ОписаниеТестовогоМодуля;
КонецФункции
@ -171,34 +171,46 @@
КонецФункции
Функция ТестовыеНаборыМодуля(Модуль, ПараметрыЗапуска)
Функция ТестовыеНаборыМодуля(МетаданныеМодуля, ПараметрыЗапуска)
// TODO Фильтрация по путям
НаборыТестов = Неопределено;
ОписаниеМодуля = Неопределено;
#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
Если Модуль.КлиентОбычноеПриложение ИЛИ Модуль.КлиентУправляемоеПриложение Тогда
НаборыТестов = ИсполняемыеСценарииМодуля(Модуль);
ИначеЕсли Модуль.Сервер Тогда
НаборыТестов = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(Модуль);
Если МетаданныеМодуля.КлиентОбычноеПриложение ИЛИ МетаданныеМодуля.КлиентУправляемоеПриложение Тогда
ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля);
ИначеЕсли МетаданныеМодуля.Сервер Тогда
ОписаниеМодуля = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(МетаданныеМодуля);
ЮТЛогирование.ВывестиСерверныеСообщения();
КонецЕсли;
#ИначеЕсли Сервер Тогда
Если Модуль.Сервер Тогда
НаборыТестов = ИсполняемыеСценарииМодуля(Модуль);
Если МетаданныеМодуля.Сервер Тогда
ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля);
Иначе
ВызватьИсключение "Чтение списка тестов модуля в недоступном контексте";
КонецЕсли;
#ИначеЕсли Клиент Тогда
Если Модуль.КлиентУправляемоеПриложение Тогда
НаборыТестов = ИсполняемыеСценарииМодуля(Модуль);
ИначеЕсли Модуль.Сервер Тогда
НаборыТестов = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(Модуль);
Если МетаданныеМодуля.КлиентУправляемоеПриложение Тогда
ОписаниеМодуля = ИсполняемыеСценарииМодуля(МетаданныеМодуля);
ИначеЕсли МетаданныеМодуля.Сервер Тогда
ОписаниеМодуля = ЮТЧитательСервер.ИсполняемыеСценарииМодуля(МетаданныеМодуля);
ЮТЛогирование.ВывестиСерверныеСообщения();
КонецЕсли;
#КонецЕсли
Возврат НаборыТестов;
Возврат ОписаниеМодуля;
КонецФункции

View File

@ -24,7 +24,7 @@
.ВТранзакции()
.УдалениеТестовыхДанных()
.ДобавитьТест("Удалить")
.ДобавитьТест("СобратьМассивВариантов");
.ДобавитьТест("ВариантыПараметров");
;
КонецПроцедуры
@ -58,13 +58,13 @@
КонецПроцедуры
Процедура СобратьМассивВариантов() Экспорт
Процедура ВариантыПараметров() Экспорт
Ключи = "Числа, Строки";
БазоваяСтруктура = Новый Структура(Ключи);
Значения = Новый Структура(Ключи, ЮТОбщий.ЗначениеВМассиве(1, 2), ЮТОбщий.ЗначениеВМассиве("1", "2"));
Результат = ЮТест.Данные().СобратьМассивВариантов(БазоваяСтруктура, Значения);
Результат = ЮТест.Данные().ВариантыПараметров(БазоваяСтруктура, Значения);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Массив")

View File

@ -107,6 +107,7 @@
Ссылки = Новый Структура("Набор, Тест");
ЮТест.Контекст().УстановитьЗначение("Ссылки", Ссылки);
СоздатьСсылку("Модуль", "Модуль"); // Если данные созданные в этом событии не удаляются то прогон в другом контексте долже упасть (на сервере)
КонецПроцедуры

View File

@ -108,15 +108,17 @@
МетаданныеМодуля.Вставить("ВызовСервера", Ложь);
ЮТФильтрация.УстановитьКонтекст(Новый Структура("filter", Новый Структура));
Сценарии = ЮТЧитатель.ИсполняемыеСценарииМодуля(МетаданныеМодуля);
ОписаниеМодуля = ЮТЧитатель.ИсполняемыеСценарииМодуля(МетаданныеМодуля);
ЮТест.ОжидаетЧто(Сценарии, "Сценарии")
.ИмеетТип("Массив")
ЮТест.ОжидаетЧто(ОписаниеМодуля, "ОписаниеМодуля")
.ИмеетТип("Структура")
.Свойство("НаборыТестов")
.ИмеетДлину(3)
.Элемент(0).ИмеетТип("Структура")
.Элемент(1).ИмеетТип("Структура")
.Элемент(2).ИмеетТип("Структура")
.Элемент("НаборыТестов[0]").ИмеетТип("Структура")
.Элемент("НаборыТестов[1]").ИмеетТип("Структура")
.Элемент("НаборыТестов[2]").ИмеетТип("Структура")
;
Сценарии = ОписаниеМодуля.НаборыТестов;
НаборПоУмолчанию = Сценарии[0];
НаборЭтоТестовыйМодуль = Сценарии[1];