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

#61 Фильтрация по тегам

Рефакторинг фильтрации и регистрации тестов
This commit is contained in:
Aleksey Ko 2024-05-13 00:49:05 +03:00
parent b286be4dce
commit 8796a2cdba
20 changed files with 525 additions and 250 deletions

View File

@ -1,8 +1,4 @@
{
"version": 1,
"settings": {
"common-module-type": {
"enabled": false
}
}
"settings": {}
}

View File

@ -144,10 +144,9 @@
//
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
// ИсполняемыеСценарии - см. ЮТТесты.СценарииМодуля
Процедура ПослеЧтенияСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии) Экспорт
Процедура ПослеЧтенияСценариевМодуля(ОписаниеТестовогоМодуля) Экспорт
ЮТЛогирование.Информация(СтрШаблон("Загрузка сценариев модуля завершена `%1`", МетаданныеМодуля.Имя));
ЮТЛогирование.Информация(СтрШаблон("Загрузка сценариев модуля завершена `%1`", ОписаниеТестовогоМодуля.МетаданныеМодуля.Имя));
КонецПроцедуры

View File

@ -211,11 +211,10 @@
// После чтения сценариев модуля.
// Позволяет настроить/обработать параметры загруженных настроек тестов модуля
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
// ИсполняемыеСценарии - см. ЮТТестыСлужебный.СценарииМодуля
Процедура ПослеЧтенияСценариевМодуля(МетаданныеМодуля, ИсполняемыеСценарии) Экспорт
// ОписаниеТестовогоМодуля - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля
Процедура ПослеЧтенияСценариевМодуля(ОписаниеТестовогоМодуля) Экспорт
Параметры = ЮТКоллекции.ЗначениеВМассиве(МетаданныеМодуля, ИсполняемыеСценарии);
Параметры = ЮТКоллекции.ЗначениеВМассиве(ОписаниеТестовогоМодуля);
ВызватьПодключаемыйОбработчикСобытия("ПослеЧтенияСценариевМодуля", "ЗагрузкаТестов", Параметры);
КонецПроцедуры

View File

@ -37,6 +37,13 @@
КонецФункции
Функция Тег(ИмяТега) Экспорт
ЮТТестыСлужебный.ДобавитьТег(ИмяТега);
Возврат ЮТТесты;
КонецФункции
// Регистрирует тест, исполняемый в контекстах, в которых доступен тестовый модуль.
// Например
//
@ -105,7 +112,7 @@
// ОбщийМодуль - Этот же модуль
Функция НастройкаИсполнения(ИмяПараметра, Значение) Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ИмяПараметра, Значение);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ИмяПараметра, Значение);
Возврат ЮТТесты;
@ -120,7 +127,7 @@
// ОбщийМодуль - Этот же модуль
Функция ВТранзакции(ВыполнятьВТранзакции = Истина) Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции, ВыполнятьВТранзакции);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции, ВыполнятьВТранзакции);
Возврат ЮТТесты;
@ -141,7 +148,7 @@
// ОбщийМодуль - Этот же модуль
Функция УдалениеТестовыхДанных(УдалятьСозданныеДанные = Истина) Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных, УдалятьСозданныеДанные);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных, УдалятьСозданныеДанные);
Возврат ЮТТесты;
@ -156,7 +163,7 @@
// ОбщийМодуль - Этот же модуль
Функция Перед(ВыполнитьПеред = "") Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().Перед, ВыполнитьПеред);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().Перед, ВыполнитьПеред);
Возврат ЮТТесты;
@ -171,7 +178,7 @@
// ОбщийМодуль - Этот же модуль
Функция После(ВыполнитьПосле = "") Экспорт
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().После, ВыполнитьПосле);
ЮТТестыСлужебный.УстановитьНастройкуИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().После, ВыполнитьПосле);
Возврат ЮТТесты;
@ -361,4 +368,18 @@
КонецФункции
// Используется для вызова произвольной функции внутри текучего интерфейса
//
// Параметры:
// _ - Произвольный
//
// Возвращаемое значение:
// CommonModule.ЮТТесты - Вызыов
//@skip-check bsl-variable-name-invalid
Функция Вызыов(_) Экспорт
Возврат ЮТТесты;
КонецФункции
#КонецОбласти

View File

@ -20,39 +20,35 @@
Процедура ДобавитьТестовыйНабор(Имя, ТегиСтрокой) Экспорт
ИсполняемыеСценарии = СценарииМодуля();
Если НЕ ЭтоИсполняемыеСценарии(ИсполняемыеСценарии) Тогда
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии";
КонецЕсли;
Если ПустаяСтрока(Имя) Тогда
ВызватьИсключение "Имя тестового набора не может быть пустым";
КонецЕсли;
Контекст = Контекст();
НовыйТестовыйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, ТегиСтрокой);
ИсполняемыеСценарии.ТестовыеНаборы.Добавить(НовыйТестовыйНабор);
Контекст.ТекущийНабор = НовыйТестовыйНабор;
Контекст.ТекущийЭлемент = НовыйТестовыйНабор;
Если Контекст = Неопределено ИЛИ НЕ Контекст.Свойство("ОписаниеМодуля") Тогда
ВызватьИсключение "Не инициализирован контекст регистрации тестов";
КонецЕсли;
ТестовыйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, ТегиСтрокой);
Контекст.ОписаниеМодуля.НаборыТестов.Добавить(ТестовыйНабор);
Контекст.ТекущийНабор = ТестовыйНабор;
Контекст.ТекущийЭлемент = ТестовыйНабор;
КонецПроцедуры
Процедура ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты) Экспорт
Если ПустаяСтрока(ИмяТестовогоМетода) Тогда
ВызватьИсключение "Имя тестового метода не может быть пустым";
КонецЕсли;
Контекст = Контекст();
Набор = Контекст.ТекущийНабор;
ЭтоИсполняемыеСценарии = ЭтоИсполняемыеСценарии(Набор);
ЭтоТестовыйНабор = ЭтоТестовыйНабор(Набор);
Если НЕ (ЭтоИсполняемыеСценарии ИЛИ ЭтоТестовыйНабор) Тогда
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии или ЮТТесты.ТестовыйНабор";
КонецЕсли;
Если ПустаяСтрока(ИмяТестовогоМетода) Тогда
ВызватьИсключение "Имя тестового метода не может быть пустым";
Если Набор = Неопределено Или НЕ Набор.Свойство("Тесты") Тогда
ВызватьИсключение "Не установлен тестовый набор. Скорее всего проблема в движке";
КонецЕсли;
Тест = ОписаниеТеста(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты);
@ -74,7 +70,7 @@
КонецПроцедуры
Процедура НастройкаИсполнения(ИмяПараметра, Значение) Экспорт
Процедура УстановитьНастройкуИсполнения(ИмяПараметра, Значение) Экспорт
Контекст = Контекст();
@ -150,6 +146,13 @@
КонецПроцедуры
Процедура ДобавитьТег(ИмяТега) Экспорт
ТекущийЭлемент = Контекст().ТекущийЭлемент;
ТекущийЭлемент.Теги.Добавить(ИмяТега);
КонецПроцедуры
Функция КонтекстыВызоваКлиента() Экспорт
Режимы = ЮТФабрика.КонтекстыВызова();
@ -161,28 +164,21 @@
//
// Возвращаемое значение:
// см. ИсполняемыеСценарии
Функция СценарииМодуля() Экспорт
Функция ОписаниеМодуля() Экспорт
СценарииМодуля = Контекст().ИсполняемыеСценарии;
Результат = Новый Структура("ТестовыеНаборы, НастройкиВыполнения, Зависимости");
Результат.ТестовыеНаборы = СценарииМодуля.ТестовыеНаборы;
// TODO Нужен рефакторинг
Результат.НастройкиВыполнения = ЮТКоллекции.СкопироватьРекурсивно(СценарииМодуля.НастройкиВыполнения);
Результат.Зависимости = ЮТКоллекции.СкопироватьРекурсивно(СценарииМодуля.Зависимости);
СценарииМодуля.НастройкиВыполнения.Очистить(); // Костыль. Очистка первого набора, тк перенесено в модуль
СценарииМодуля.Зависимости.Очистить(); // Костыль. Очистка первого набора, тк перенесено в модуль
//@skip-check constructor-function-return-section
Возврат Результат;
Возврат Контекст().ОписаниеМодуля;
КонецФункции
// Контекст.
//
// Возвращаемое значение:
// Структура - Контекст:
// * ОписаниеМодуля - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля
Функция Контекст() Экспорт
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("КонтекстРегистрацияТестов");
//@skip-check constructor-function-return-section
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекста());
КонецФункции
@ -191,14 +187,12 @@
Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля) Экспорт
ИнициализироватьКонтекст(МетаданныеМодуля);
ЮТСобытияСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
КонецПроцедуры
Процедура ПослеЧтенияСценариевМодуля() Экспорт
Процедура ПослеЧтенияСценариевМодуля(ОписаниеТестовогоМодуля) Экспорт
Контекст = Контекст();
ЮТСобытияСлужебный.ПослеЧтенияСценариевМодуля(Контекст.МетаданныеМодуля, Контекст.ИсполняемыеСценарии);
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекста(), Неопределено);
КонецПроцедуры
@ -208,36 +202,27 @@
#Область СлужебныеПроцедурыИФункции
// Исполняемые сценарии.
//
// Новое описание тестового модуля.
//
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
//
//
// Возвращаемое значение:
// Структура - Исполняемые сценарии:
// * ТестовыеНаборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Тестовые наборы модуля
// * НастройкиВыполнения - Структура - Настройки исполнения тестов модуля
// * Зависимости - Массив Из см. ЮТФабрика.НовоеОписаниеЗависимости - Зависимости тестового модуля
Функция ИсполняемыеСценарии(МетаданныеМодуля)
// см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля
Функция НовоеОписаниеТестовогоМодуля(МетаданныеМодуля)
Структура = Новый Структура;
Структура.Вставить("ТестовыеНаборы", Новый Массив);
Структура.Вставить("НастройкиВыполнения", Новый Структура);
Структура.Вставить("Зависимости", Новый Массив);
ОписаниеМодуля = ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля, Новый Массив);
Набор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
Набор.НастройкиВыполнения = Структура.НастройкиВыполнения; // Общие настройки с набором по умолчанию
Набор.Зависимости = Структура.Зависимости; // Общие зависимости с набором по умолчанию
НаборПоУмолчанию = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
ОписаниеМодуля.НаборыТестов.Добавить(НаборПоУмолчанию);
Структура.ТестовыеНаборы.Добавить(Набор);
Возврат Структура;
Возврат ОписаниеМодуля;
КонецФункции
Функция КонтекстыВызоваПоУмолчанию()
Возврат ЮТФабрикаСлужебный.КонтекстыМодуля(Контекст().МетаданныеМодуля);
Возврат ЮТФабрикаСлужебный.КонтекстыМодуля(Контекст().ОписаниеМодуля.МетаданныеМодуля);
КонецФункции
@ -249,20 +234,6 @@
КонецФункции
Функция ЭтоИсполняемыеСценарии(ИсполняемыеСценарии)
Возврат ТипЗнч(ИсполняемыеСценарии) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ИсполняемыеСценарии, "ТестовыеНаборы")) = Тип("Массив");
КонецФункции
Функция ЭтоТестовыйНабор(ТестовыйНабор)
Возврат ТипЗнч(ТестовыйНабор) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ТестовыйНабор, "Тесты")) = Тип("Массив");
КонецФункции
Функция ЭтоОписаниеТеста(Описание)
Возврат ТипЗнч(Описание) = Тип("Структура")
@ -284,18 +255,17 @@
Процедура ИнициализироватьКонтекст(МетаданныеМодуля)
ИсполняемыеСценарии = ИсполняемыеСценарии(МетаданныеМодуля);
Набор = ИсполняемыеСценарии.ТестовыеНаборы[0];
ОписаниеМодуля = НовоеОписаниеТестовогоМодуля(МетаданныеМодуля);
НаборПоУмолчанию = ОписаниеМодуля.НаборыТестов[0];
Контекст = Новый Структура();
Контекст.Вставить("МетаданныеМодуля", МетаданныеМодуля);
Контекст.Вставить("ИсполняемыеСценарии", ИсполняемыеСценарии);
Контекст.Вставить("ТекущийНабор", Набор);
Контекст.Вставить("ТекущийЭлемент", Набор);
Контекст.Вставить("ОписаниеМодуля", ОписаниеМодуля);
Контекст.Вставить("ТекущийНабор", НаборПоУмолчанию);
Контекст.Вставить("ТекущийЭлемент", ОписаниеМодуля);
Контекст.Вставить("БазовыйТест", Неопределено);
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("КонтекстРегистрацияТестов", Контекст);
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекста(), Контекст);
КонецПроцедуры
@ -313,4 +283,10 @@
КонецФункции
Функция ИмяКонтекста()
Возврат "КонтекстРегистрацияТестов";
КонецФункции
#КонецОбласти

View File

@ -122,9 +122,12 @@
Описание.Вставить("Имя", Строка(Имя));
Описание.Вставить("Представление", Строка(Имя));
Описание.Вставить("Теги", СтрРазделить(ТегиСтрокой, ", ", Ложь));
Описание.Вставить("Тесты", Новый Массив);
Если ЗначениеЗаполнено(ТегиСтрокой) Тогда
Описание.Теги = СтрРазделить(ТегиСтрокой, ", ", Ложь);
КонецЕсли;
Возврат Описание;
КонецФункции
@ -143,7 +146,7 @@
// * Имя - Строка - Имя теста (тестового метода)
// * Представление - Строка - Представление теста
// * Теги - Массив из Строка - Теги теста
// * КонтекстВызова - Массив из Строка - Контексты исполнения теста
// * КонтекстВызова - Массив из Строка - Контексты исполнения теста, см. ЮТФабрика.КонтекстыВызова
// * НастройкиВыполнения- Структура - Настройки исполнения теста
// * Параметры - Неопределено, Массив из Произвольный - Параметры теста
// * НомерВНаборе - Число - Порядковый номер теста в наборе
@ -158,11 +161,14 @@
Описание = БазовоеОписаниеРегистрируемогоОбъекта();
Описание.Вставить("Имя", Строка(Имя));
Описание.Вставить("Представление", Строка(Представление));
Описание.Вставить("Теги", СтрРазделить(ТегиСтрокой, ", ", Ложь));
Описание.Вставить("КонтекстВызова", КонтекстыВызова);
Описание.Вставить("Параметры", Неопределено);
Описание.Вставить("НомерВНаборе", 0);
Если ЗначениеЗаполнено(ТегиСтрокой) Тогда
Описание.Теги = СтрРазделить(ТегиСтрокой, ", ", Ложь);
КонецЕсли;
Возврат Описание;
КонецФункции
@ -705,6 +711,7 @@
Описание.Вставить("НастройкиВыполнения", Новый Структура());
Описание.Вставить("Зависимости", Новый Массив());
Описание.Вставить("Ошибки", Новый Массив);
Описание.Вставить("Теги", Новый Массив);
Возврат Описание;

View File

@ -41,88 +41,44 @@
// Отфильтровать тестовые наборы.
//
// Параметры:
// ТестовыеНаборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Тестовые наборы
// ОписаниеМодуля - Структура - Описание модуля, которому принадлежат наборы, см. ЮТФабрикаСлужебный.ОписаниеМодуля
//
// Возвращаемое значение:
// Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Отфильтрованные наборы
Функция ОтфильтроватьТестовыеНаборы(ТестовыеНаборы, ОписаниеМодуля) Экспорт
// ОписаниеТестовогоМодуля - см. ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля
Процедура ОтфильтроватьТестовыеНаборы(ОписаниеТестовогоМодуля) Экспорт
Контекст = ЮТКонтекстСлужебный.КонтекстЧитателя();
Фильтр = ЮТКонтекстСлужебный.КонтекстЧитателя().Фильтр;
Если НЕ Контекст.Фильтр.ЕстьФильтрТестов И НЕ Контекст.Фильтр.ЕстьФильтрКонтекстов Тогда
Возврат ТестовыеНаборы;
Если НЕ Фильтр.ЕстьФильтрТестов И НЕ Фильтр.ЕстьФильтрКонтекстов И НЕ Фильтр.ЕстьФильтрТегов Тогда
Возврат;
КонецЕсли;
НаборыТестов = ОписаниеТестовогоМодуля.НаборыТестов;
МетаданныеМодуля = ОписаниеТестовогоМодуля.МетаданныеМодуля;
Результат = Новый Массив();
Если Контекст.Фильтр.ЕстьФильтрТестов Тогда
ДоступныеТестовыеМетоды = Новый Соответствие();
Для Каждого ОписаниеИмениТеста Из Контекст.Фильтр.Тесты Цикл
Если СтрСравнить(ОписаниеИмениТеста.ИмяМодуля, ОписаниеМодуля.Имя) = 0 Тогда
ОписаниеИмениТеста.ИмяМетода = ВРег(ОписаниеИмениТеста.ИмяМетода);
СохраненноеОписаниеИмени = ДоступныеТестовыеМетоды[ОписаниеИмениТеста.ИмяМетода];
Если СохраненноеОписаниеИмени = Неопределено И ОписаниеИмениТеста.Контекст = Неопределено Тогда
ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста);
ИначеЕсли СохраненноеОписаниеИмени = Неопределено Тогда
ОписаниеИмениТеста.Контекст = ЮТКоллекции.ЗначениеВМассиве(ОписаниеИмениТеста.Контекст);
ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста);
ИначеЕсли ОписаниеИмениТеста.Контекст = Неопределено Тогда
СохраненноеОписаниеИмени.Контекст = Неопределено; // Без фильтрации контекста теста, возьмом из самого теста контексты
ИначеЕсли СохраненноеОписаниеИмени.Контекст <> Неопределено Тогда
СохраненноеОписаниеИмени.Контекст.Добавить(ОписаниеИмениТеста.Контекст);
Иначе
// Если было имя теста без контекста, то будет вызов во всех контекстах
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
СостояниеФильтрации = Новый Структура;
ДоступныеТестовыеМетоды(Фильтр, МетаданныеМодуля, СостояниеФильтрации);
Для Каждого Набор Из ТестовыеНаборы Цикл
Для Каждого Набор Из НаборыТестов Цикл
ОтфильтрованныйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Набор.Имя);
ЗаполнитьЗначенияСвойств(ОтфильтрованныйНабор, Набор, , "Тесты");
ОбработатьТегиНабора(ОписаниеТестовогоМодуля, Набор, Фильтр, СостояниеФильтрации);
Для Каждого Тест Из Набор.Тесты Цикл
КонтекстыТеста = Неопределено;
ТестПодходитПодФильтр = ФильтрТестов(Тест, Фильтр, СостояниеФильтрации)
И ФильтрКонтекста(Тест, Фильтр)
И ФильтрТегов(Тест, Фильтр, СостояниеФильтрации);
Если ДоступныеТестовыеМетоды <> Неопределено Тогда
ОписаниеИмениТеста = ДоступныеТестовыеМетоды[ВРег(Тест.Имя)];
Если ТестПодходитПодФильтр Тогда
Если ОписаниеИмениТеста = Неопределено Тогда
Продолжить;
КонецЕсли;
КонтекстыТеста = ОписаниеИмениТеста.Контекст;
ОтфильтрованныйТест = ЮТФабрикаСлужебный.ОписаниеТеста(Тест.Имя, "", "");
ЗаполнитьЗначенияСвойств(ОтфильтрованныйТест, Тест);
ОтфильтрованныйНабор.Тесты.Добавить(ОтфильтрованныйТест);
КонецЕсли;
Если КонтекстыТеста = Неопределено Тогда
КонтекстыТеста = Тест.КонтекстВызова;
КонецЕсли;
Если Контекст.Фильтр.ЕстьФильтрКонтекстов Тогда
КонтекстыТеста = ЮТКоллекции.ПересечениеМассивов(КонтекстыТеста, Контекст.Фильтр.Контексты);
КонецЕсли;
Если КонтекстыТеста.Количество() = 0 Тогда
// Возможно стоит такие выводить в лог с ошибкой "по переданным параметрам контекст теста не определен"
Продолжить;
КонецЕсли;
ОтфильтрованныйТест = ЮТФабрикаСлужебный.ОписаниеТеста(Тест.Имя, "", "");
ЗаполнитьЗначенияСвойств(ОтфильтрованныйТест, Тест, , "КонтекстВызова");
ОтфильтрованныйТест.КонтекстВызова = КонтекстыТеста;
ОтфильтрованныйНабор.Тесты.Добавить(ОтфильтрованныйТест);
КонецЦикла;
Если ОтфильтрованныйНабор.Тесты.Количество() Тогда
@ -131,9 +87,9 @@
КонецЦикла;
Возврат Результат;
ОписаниеТестовогоМодуля.НаборыТестов = Результат;
КонецФункции
КонецПроцедуры
// Фильтр
// Конструктур фильтра поиска тестовых методов
@ -154,7 +110,7 @@
Фильтр.Расширения = Новый Структура();
Фильтр.Модули = Новый Структура();
Фильтр.Теги = Новый Массив();
Фильтр.Теги = Новый Структура();
Фильтр.Контексты = Новый Массив();
Фильтр.Наборы = Новый Массив();
Фильтр.Пути = Новый Массив();
@ -191,7 +147,7 @@
КонецЕсли;
Если ЗначениеЗаполнено(Теги) Тогда
Фильтр.Теги = Теги;
Фильтр.Теги = МассивВСтруктуру(Теги);
КонецЕсли;
Если ЗначениеЗаполнено(Наборы) Тогда
@ -232,8 +188,9 @@
Фильтр.Вставить("ЕстьФильтрРасширений", Фильтр.Расширения.Количество() > 0);
Фильтр.Вставить("ЕстьФильтрМодулей", МодулиТестов.Количество() ИЛИ Фильтр.Модули.Количество());
Фильтр.Вставить("ЕстьФильтрТестов", Фильтр.Тесты.Количество());
Фильтр.Вставить("ЕстьФильтрТестов", Фильтр.Тесты.Количество() > 0 );
Фильтр.Вставить("ЕстьФильтрКонтекстов", ЗначениеЗаполнено(Фильтр.Контексты));
Фильтр.Вставить("ЕстьФильтрТегов", ЗначениеЗаполнено(Фильтр.Теги));
ЮТКонтекстСлужебный.УстановитьКонтекстЧитателя(Новый Структура("Фильтр", Фильтр));
@ -291,4 +248,114 @@
КонецФункции
Процедура ДоступныеТестовыеМетоды(Фильтр, ОписаниеМодуля, СостояниеФильтрации)
Если НЕ Фильтр.ЕстьФильтрТестов Тогда
Возврат;
КонецЕсли;
ДоступныеТестовыеМетоды = Новый Соответствие();
Для Каждого ОписаниеИмениТеста Из Фильтр.Тесты Цикл
Если СтрСравнить(ОписаниеИмениТеста.ИмяМодуля, ОписаниеМодуля.Имя) = 0 Тогда
ОписаниеИмениТеста.ИмяМетода = ВРег(ОписаниеИмениТеста.ИмяМетода);
СохраненноеОписаниеИмени = ДоступныеТестовыеМетоды[ОписаниеИмениТеста.ИмяМетода];
Если СохраненноеОписаниеИмени = Неопределено И ОписаниеИмениТеста.Контекст = Неопределено Тогда
ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста);
ИначеЕсли СохраненноеОписаниеИмени = Неопределено Тогда
ОписаниеИмениТеста.Контекст = ЮТКоллекции.ЗначениеВМассиве(ОписаниеИмениТеста.Контекст);
ДоступныеТестовыеМетоды.Вставить(ВРег(ОписаниеИмениТеста.ИмяМетода), ОписаниеИмениТеста);
ИначеЕсли ОписаниеИмениТеста.Контекст = Неопределено Тогда
СохраненноеОписаниеИмени.Контекст = Неопределено; // Без фильтрации контекста теста, возьмом из самого теста контексты
ИначеЕсли СохраненноеОписаниеИмени.Контекст <> Неопределено Тогда
СохраненноеОписаниеИмени.Контекст.Добавить(ОписаниеИмениТеста.Контекст);
Иначе
// Если было имя теста без контекста, то будет вызов во всех контекстах
КонецЕсли;
КонецЕсли;
КонецЦикла;
СостояниеФильтрации.Вставить("ДоступныеТестовыеМетоды", ДоступныеТестовыеМетоды);
КонецПроцедуры
Процедура ОбработатьТегиНабора(ОписаниеМодуля, Набор, Фильтр, СостояниеФильтрации)
Если НЕ Фильтр.ЕстьФильтрТегов Тогда
Возврат;
КонецЕсли;
ПодходитПодФильтрТегов = ПодходитПодФильтрТегов(Фильтр, ОписаниеМодуля.Теги) Или ПодходитПодФильтрТегов(Фильтр, Набор.Теги);
СостояниеФильтрации.Вставить("ПодходитПодФильтрТегов", ПодходитПодФильтрТегов);
КонецПроцедуры
Функция ПодходитПодФильтрТегов(Фильтр, Теги)
Для Каждого Тег Из Теги Цикл
Если Фильтр.Теги.Свойство(Тег) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Функция ФильтрТестов(Тест, Фильтр, СостояниеФильтрации)
Если НЕ Фильтр.ЕстьФильтрТестов Тогда
Возврат Истина;
КонецЕсли;
ФильтрТеста = СостояниеФильтрации.ДоступныеТестовыеМетоды[ВРег(Тест.Имя)];
Если ФильтрТеста = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(ФильтрТеста.Контекст) Тогда
Тест.КонтекстВызова = ЮТКоллекции.ПересечениеМассивов(Тест.КонтекстВызова, ФильтрТеста.Контекст);
КонецЕсли;
Возврат ЗначениеЗаполнено(Тест.КонтекстВызова);
КонецФункции
Функция ФильтрКонтекста(Тест, Фильтр)
Если НЕ Фильтр.ЕстьФильтрКонтекстов Тогда
Возврат Истина;
КонецЕсли;
Тест.КонтекстВызова = ЮТКоллекции.ПересечениеМассивов(Тест.КонтекстВызова, Фильтр.Контексты);
Возврат ЗначениеЗаполнено(Тест.КонтекстВызова);
КонецФункции
Функция ФильтрТегов(Тест, Фильтр, СостояниеФильтрации)
Если НЕ Фильтр.ЕстьФильтрТегов Или СостояниеФильтрации.ПодходитПодФильтрТегов Тогда
Возврат Истина;
КонецЕсли;
Для Каждого Тег Из Тест.Теги Цикл
Если Фильтр.Теги.Свойство(Тег) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
#КонецОбласти

View File

@ -62,9 +62,8 @@
Функция ИсполняемыеСценарииМодуля(Знач МетаданныеМодуля) Экспорт
ЭтоТестовыйМодуль = Истина;
ОписаниеТестовогоМодуля = ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля, Новый Массив);
ЮТТестыСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
ЮТСобытияСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
ПолноеИмяМетода = МетаданныеМодуля.Имя + "." + ИмяМетодаСценариев();
Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода);
@ -88,16 +87,15 @@
НаборПоУмолчанию = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
ЮТРегистрацияОшибокСлужебный.ЗарегистрироватьОшибкуЧтенияТестов(НаборПоУмолчанию, "Ошибка формирования списка тестовых методов", Ошибка);
ОписаниеТестовогоМодуля = ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля, Новый Массив);
ОписаниеТестовогоМодуля.НаборыТестов.Добавить(НаборПоУмолчанию);
ИначеЕсли ЭтоТестовыйМодуль Тогда
ЮТТестыСлужебный.ПослеЧтенияСценариевМодуля();
Сценарии = ЮТТестыСлужебный.СценарииМодуля();
ОписаниеТестовогоМодуля.НаборыТестов = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Сценарии.ТестовыеНаборы, МетаданныеМодуля);
ОписаниеТестовогоМодуля.НастройкиВыполнения = Сценарии.НастройкиВыполнения;
ОписаниеТестовогоМодуля.Зависимости = Сценарии.Зависимости;
ОписаниеТестовогоМодуля = ЮТТестыСлужебный.ОписаниеМодуля();
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеТестовогоМодуля);
ЮТСобытияСлужебный.ПослеЧтенияСценариевМодуля(ОписаниеТестовогоМодуля);
Иначе

View File

@ -6,5 +6,6 @@
<value>Загрузка тестов</value>
</synonym>
<includeHelpInContents>true</includeHelpInContents>
<content>CommonModule.ЮТТестыСлужебный</content>
<parentSubsystem>Subsystem.ЮТПодключаемыеМодули.Subsystem.ОбработчикиСобытий</parentSubsystem>
</mdclass:Subsystem>

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("Обучение")
.ДобавитьТест("Обучение_ЦепочкаВызовов")
.ДобавитьТест("Проверить")

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("ВыброситьИсключение")
.ДобавитьСерверныйТест("ФормированиеТипыПерехватываемыхОбъектов")
;

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("ДанныеПерехвата")
;

View File

@ -20,7 +20,8 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.УдалениеТестовыхДанных()
ЮТТесты.Вызов(ТегиТестов.Мокирование())
.УдалениеТестовыхДанных()
.ДобавитьТест("ЗаполнитьСправочник")
.ДобавитьТест("ЗаполнитьДокумент")
.ДобавитьТест("СоздатьЗаписьРегистраСведений")
@ -32,7 +33,7 @@
.ДобавитьТест("СоздатьГруппу")
.ДобавитьТест("УстановитьРеквизиты")
.ДобавитьТест("УстановитьСсылкуНового")
;
;
КонецПроцедуры

View File

@ -24,34 +24,40 @@
.ДобавитьТест("ЭтоПодходящееРасширение")
.ДобавитьТест("ЭтоПодходящийМодуль")
.ДобавитьТест("ОтфильтроватьТестовыеНаборы")
;
.Добавитьтест("Фильтр_ПолноеИмяТеста")
.Добавитьтест("Фильтр_Контексты")
.Добавитьтест("Фильтр_ТегиМодуля")
.Добавитьтест("Фильтр_ТегиНабора")
.Добавитьтест("Фильтр_ТегиТеста")
;
КонецПроцедуры
Процедура ЭтоПодходящееРасширение() Экспорт
Варианты = Новый Массив();
Ключи = "ИмяРасширения, Параметры, Результат, Описание";
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве("test", "тесты");
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Простой кейс"));
Варианты.Добавить(Новый Структура(Ключи, "TeST", Параметры, Истина, "Изменен регистр"));
Варианты.Добавить(Новый Структура(Ключи, "тесты", Параметры, Истина, "Второе расширение"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Ложь, "Отсутствующее расширение"));
Варианты = ЮТест.Варианты("ИмяРасширения, Параметры, Результат, Описание");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Без фильтр по расширениям 1"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Истина, "Без фильтр по расширениям 2"));
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве("test", "тесты");
Варианты.Добавить("test", Параметры, Истина, "Простой кейс");
Варианты.Добавить("TeST", Параметры, Истина, "Изменен регистр");
Варианты.Добавить("тесты", Параметры, Истина, "Второе расширение");
Варианты.Добавить("_test", Параметры, Ложь, "Отсутствующее расширение");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Варианты.Добавить("test", Параметры, Истина, "Без фильтр по расширениям 1");
Варианты.Добавить("_test", Параметры, Истина, "Без фильтр по расширениям 2");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("test.method");
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Фильтр по пути"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Истина, "Фильтр по пути, отпустствующее расширение"));
Варианты.Добавить("test", Параметры, Истина, "Фильтр по пути");
Варианты.Добавить("_test", Параметры, Истина, "Фильтр по пути, отпустствующее расширение");
Для Каждого Вариант Из Варианты Цикл
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
ЮТФильтрацияСлужебный.УстановитьКонтекст(Вариант.Параметры);
УстановитьФильтр(Вариант.Параметры);
Результат = ЮТФильтрацияСлужебный.ЭтоПодходящееРасширение(Вариант.ИмяРасширения);
ЮТест.ОжидаетЧто(Результат, Вариант.Описание).Равно(Вариант.Результат);
КонецЦикла;
@ -60,90 +66,66 @@
Процедура ЭтоПодходящийМодуль() Экспорт
Варианты = Новый Массив();
Ключи = "ИмяМодуля, Параметры, Результат, Описание";
Варианты = ЮТест.Варианты("ИмяМодуля, Параметры, Результат, Описание");
РасширениеПоУмолчанию = "__тесты___";
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("test", "тесты");
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Простой кейс"));
Варианты.Добавить(Новый Структура(Ключи, "TeST", Параметры, Истина, "Изменен регистр"));
Варианты.Добавить(Новый Структура(Ключи, "тесты", Параметры, Истина, "Второй модуль"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Ложь, "Отсутствующий модуль"));
Варианты.Добавить("test", Параметры, Истина, "Простой кейс");
Варианты.Добавить("TeST", Параметры, Истина, "Изменен регистр");
Варианты.Добавить("тесты", Параметры, Истина, "Второй модуль");
Варианты.Добавить("_test", Параметры, Ложь, "Отсутствующий модуль");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Без фильтр по `module`"));
Варианты.Добавить(Новый Структура(Ключи, "_module", Параметры, Истина, "Без фильтр по `_module`"));
Варианты.Добавить("module", Параметры, Истина, "Без фильтр по `module`");
Варианты.Добавить("_module", Параметры, Истина, "Без фильтр по `_module`");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("module");
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве(РасширениеПоУмолчанию);
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Фильтр по модулю и по расширению с пересечением"));
Варианты.Добавить("module", Параметры, Истина, "Фильтр по модулю и по расширению с пересечением");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("module");
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве("тесты");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Ложь, "Фильтр по модулю и по расширению без пересечения"));
Варианты.Добавить("module", Параметры, Ложь, "Фильтр по модулю и по расширению без пересечения");
// Фильтрация по именам тестовых методов
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Фильтр по имени теста"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Ложь, "Фильтр по имени теста, отсутствующему модулю"));
Варианты.Добавить("module", Параметры, Истина, "Фильтр по имени теста");
Варианты.Добавить("_test", Параметры, Ложь, "Фильтр по имени теста, отсутствующему модулю");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве(РасширениеПоУмолчанию);
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Фильтр по имени теста и по расширению с пересечением"));
Варианты.Добавить("module", Параметры, Истина, "Фильтр по имени теста и по расширению с пересечением");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Параметры.filter.extensions = ЮТКоллекции.ЗначениеВМассиве("test");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Ложь, "Фильтр по имени теста и по расширению без пересечения"));
Варианты.Добавить("module", Параметры, Ложь, "Фильтр по имени теста и по расширению без пересечения");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("module");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Истина, "Фильтр по имени теста и по модулю с пересечением"));
Варианты.Добавить("module", Параметры, Истина, "Фильтр по имени теста и по модулю с пересечением");
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("module.method");
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("test");
Варианты.Добавить(Новый Структура(Ключи, "module", Параметры, Ложь, "Фильтр по имени теста и по модулю без пересечения"));
Варианты.Добавить("module", Параметры, Ложь, "Фильтр по имени теста и по модулю без пересечения");
Для Каждого Вариант Из Варианты Цикл
Для Каждого Вариант Из Варианты.СписокВариантов() Цикл
УстановитьФильтр(Вариант.Параметры);
ОписаниеМодуля = МетаданныеМодуля(Вариант.ИмяМодуля, РасширениеПоУмолчанию);
ЮТФильтрацияСлужебный.УстановитьКонтекст(Вариант.Параметры);
ОписаниеМодуля = ЮТФабрикаСлужебный.ОписаниеМодуля();
ОписаниеМодуля.Имя = Вариант.ИмяМодуля;
ОписаниеМодуля.Расширение = РасширениеПоУмолчанию;
Результат = ЮТФильтрацияСлужебный.ЭтоПодходящийМодуль(ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, Вариант.Описание + ". Имя модуля:" + Вариант.ИмяМодуля).Равно(Вариант.Результат);
КонецЦикла;
КонецПроцедуры
Процедура ЭтоПодходящийМетод() Экспорт
Варианты = Новый Массив();
Ключи = "ИмяМодуля, Параметры, Результат, Описание";
РасширениеПоУмолчанию = "__тесты___";
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.modules = ЮТКоллекции.ЗначениеВМассиве("test", "тесты");
Варианты.Добавить(Новый Структура(Ключи, "test", Параметры, Истина, "Простой кейс"));
Варианты.Добавить(Новый Структура(Ключи, "TeST", Параметры, Истина, "Изменен регистр"));
Варианты.Добавить(Новый Структура(Ключи, "тесты", Параметры, Истина, "Второй модуль"));
Варианты.Добавить(Новый Структура(Ключи, "_test", Параметры, Ложь, "Отсутствующий модуль"));
Для Каждого Вариант Из Варианты Цикл
ЮТФильтрацияСлужебный.УстановитьКонтекст(Вариант.Параметры);
ОписаниеМодуля = ЮТФабрикаСлужебный.ОписаниеМодуля();
ОписаниеМодуля.Имя = Вариант.ИмяМодуля;
ОписаниеМодуля.Расширение = РасширениеПоУмолчанию;
Результат = ЮТФильтрацияСлужебный.ЭтоПодходящийМодуль(ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, Вариант.Описание + ". Имя модуля:" + Вариант.ИмяМодуля).Равно(Вариант.Результат);
КонецЦикла;
@ -169,7 +151,7 @@
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("ТестовыйМодуль.Тест1");
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
УстановитьФильтр(Параметры);
Результат = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Наборы, ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, "Результат фильтрации")
@ -189,7 +171,7 @@
// 2
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("ТестовыйМодуль.Тест1.Сервер");
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
УстановитьФильтр(Параметры);
Результат = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Наборы, ОписаниеМодуля);
ТестРезультата = Результат[0].Тесты[0];
@ -200,7 +182,7 @@
// 3
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("ТестовыйМодуль.Тест1.ВызовСервера");
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
УстановитьФильтр(Параметры);
Результат = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Наборы, ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, "Тест с указаниме недоступного контекста")
@ -210,7 +192,7 @@
Параметры = ЮТФабрика.ПараметрыЗапуска();
Параметры.filter.tests = ЮТКоллекции.ЗначениеВМассиве("ТестовыйМодуль.Тест1.Сервер");
Параметры.filter.contexts = ЮТКоллекции.ЗначениеВМассиве(Контексты.КлиентУправляемоеПриложение);
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
УстановитьФильтр(Параметры);
Результат = ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(Наборы, ОписаниеМодуля);
ЮТест.ОжидаетЧто(Результат, "Тест с указаниме контекста и фильтра контекстов")
@ -218,4 +200,188 @@
КонецПроцедуры
Процедура Фильтр_ПолноеИмяТеста() Экспорт
ИмяМодуля = "ТестовыйМодуль";
ИмяТеста = "ТестовыйТест";
ОписаниеМодуля = ОписаниеМодуля(ИмяМодуля);
НаборТестов = ОписаниеНабораТестов();
НаборТестов.Тесты.Добавить(ОписаниеТеста(ИмяТеста));
НаборТестов.Тесты.Добавить(ОписаниеТеста(ИмяТеста + "_"));
НаборТестов.Тесты.Добавить(ОписаниеТеста(ИмяТеста, "НеСервер"));
НаборТестов.Тесты.Добавить(ОписаниеТеста());
ОписаниеМодуля.НаборыТестов.Добавить(НаборТестов);
УстановитьНовыйФильтр(, СтрШаблон("%1.%2", ИмяМодуля, ИмяТеста));
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(1);
КонецПроцедуры
Процедура Фильтр_Контексты() Экспорт
ОписаниеМодуля = ОписаниеМодуля();
НаборТестов = ОписаниеНабораТестов();
НаборТестов.Тесты.Добавить(ОписаниеТеста()); // +
НаборТестов.Тесты.Добавить(ОписаниеТеста(, "Сервер")); // +
НаборТестов.Тесты.Добавить(ОписаниеТеста(, "Сервер, Сервер")); // +
НаборТестов.Тесты.Добавить(ОписаниеТеста(, "Клиент"));
ОписаниеМодуля.НаборыТестов.Добавить(НаборТестов);
УстановитьНовыйФильтр(, , "Сервер");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(3);
КонецПроцедуры
Процедура Фильтр_ТегиТеста() Экспорт
ОписаниеМодуля = ОписаниеМодуля();
НаборТестов = ОписаниеНабораТестов();
НаборТестов.Тесты.Добавить(ОписаниеТеста());
НаборТестов.Тесты.Добавить(ОписаниеТеста(, , "Тег1"));
НаборТестов.Тесты.Добавить(ОписаниеТеста(, , "Тег1, Тег2"));
НаборТестов.Тесты.Добавить(ОписаниеТеста(, , "Тег2"));
НаборТестов.Тесты.Добавить(ОписаниеТеста(, , "Тег11"));
ОписаниеМодуля.НаборыТестов.Добавить(НаборТестов);
УстановитьНовыйФильтр(, , , "Тег1, Тег2, Т, _, Тег111");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(3);
КонецПроцедуры
Процедура Фильтр_ТегиНабора() Экспорт
Набор1 = ОписаниеНабораТестов();
Набор1.Теги = ЮТКоллекции.ЗначениеВМассиве("ТегНабора");
Набор1.Тесты.Добавить(ОписаниеТеста());
Набор1.Тесты.Добавить(ОписаниеТеста());
Набор2 = ОписаниеНабораТестов();
Набор2.Тесты.Добавить(ОписаниеТеста());
Набор2.Тесты.Добавить(ОписаниеТеста(, , "ТегТеста"));
ОписаниеМодуля = ОписаниеМодуля();
ДобавитьКопиюНабора(ОписаниеМодуля, Набор1);
ДобавитьКопиюНабора(ОписаниеМодуля, Набор2);
УстановитьНовыйФильтр(, , , "ТегНабора");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(1)
.Свойство("[0].Тесты").ИмеетДлину(2);
ОписаниеМодуля = ОписаниеМодуля();
ДобавитьКопиюНабора(ОписаниеМодуля, Набор1);
ДобавитьКопиюНабора(ОписаниеМодуля, Набор2);
УстановитьНовыйФильтр(, , , "ТегНабора, ТегТеста");
ЮТФильтрацияСлужебный.ОтфильтроватьТестовыеНаборы(ОписаниеМодуля);
ЮТест.ОжидаетЧто(ОписаниеМодуля.НаборыТестов)
.ИмеетДлину(2)
.Свойство("[0].Тесты").ИмеетДлину(2)
.Свойство("[1].Тесты").ИмеетДлину(1);
КонецПроцедуры
Процедура Фильтр_ТегиМодуля() Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура УстановитьНовыйФильтр(Модули = Неопределено,
Тесты = Неопределено,
Контексты = Неопределено,
Теги = Неопределено,
Расширения = Неопределено)
Параметры = ЮТФабрика.ПараметрыЗапуска();
Если Расширения <> Неопределено Тогда
Параметры.filter.extensions = ЮТСтроки.РазделитьСтроку(Расширения, ",");
КонецЕсли;
Если Тесты <> Неопределено Тогда
Параметры.filter.tests = ЮТСтроки.РазделитьСтроку(Тесты, ",");
КонецЕсли;
Если Модули <> Неопределено Тогда
Параметры.filter.modules = ЮТСтроки.РазделитьСтроку(Модули, ",");
КонецЕсли;
Если Теги <> Неопределено Тогда
Параметры.filter.tags = ЮТСтроки.РазделитьСтроку(Теги, ",");
КонецЕсли;
Если Контексты <> Неопределено Тогда
Параметры.filter.contexts = ЮТСтроки.РазделитьСтроку(Контексты, ",");
КонецЕсли;
УстановитьФильтр(Параметры);
КонецПроцедуры
Процедура УстановитьФильтр(Параметры)
ЮТФильтрацияСлужебный.УстановитьКонтекст(Параметры);
КонецПроцедуры
Функция МетаданныеМодуля(ИмяМодуля = "ТестовыйМодуль", Расширение = "ТестовоеРасширение")
МетаданныеМодуля = ЮТФабрикаСлужебный.ОписаниеМодуля();
МетаданныеМодуля.Имя = ИмяМодуля;
МетаданныеМодуля.Расширение = Расширение;
Возврат МетаданныеМодуля;
КонецФункции
Функция ОписаниеМодуля(ИмяМодуля = "ТестовыйМодуль")
Возврат ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля(ИмяМодуля), Новый Массив());
КонецФункции
Функция ОписаниеНабораТестов(Имя = "ТестовыйНабор", Теги = "")
Возврат ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, Теги);
КонецФункции
Функция ОписаниеТеста(ИмяТеста = Неопределено, КонтекстыВызова = "Сервер, КлиентУправляемоеПриложение", Теги = "")
Если ИмяТеста = Неопределено Тогда
ИмяТеста = ЮТест.Данные().СлучайнаяСтрока();
КонецЕсли;
Возврат ЮТФабрикаСлужебный.ОписаниеТеста(ИмяТеста,
ЮТест.Данные().СлучайнаяСтрока(),
СтрРазделить(КонтекстыВызова, ", ", Ложь),
Теги);
КонецФункции
Процедура ДобавитьКопиюНабора(ОписаниеМодуля, Набор)
ОписаниеМодуля.НаборыТестов.ДОбавить(ЮТКоллекции.СкопироватьРекурсивно(Набор));
КонецПроцедуры
#КонецОбласти

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("Конструктор")
.ДобавитьТест("УстановитьТело")
;

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("Мокирование")
.ДобавитьТест("Инициализировать")
.ДобавитьТест("Добавить")
.ДобавитьТест("MoveFirst")

View File

@ -20,7 +20,7 @@
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты
ЮТТесты.Тег("ТестовыеДанные")
.ДобавитьТест("Установить")
.ДобавитьТест("УстановитьРеквизиты")
.ДобавитьТест("Фикция")

View File

@ -0,0 +1,32 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Область СлужебныйПрограммныйИнтерфейс
Функция Мокирование() Экспорт
ЮТТесты.Тег("Мокирование");
Возврат ТегиТестов;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a92bd232-f801-4337-aae8-5e0ff73cd9fc">
<name>ТегиТестов</name>
<synonym>
<key>ru</key>
<value>Теги тестов</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -65,6 +65,7 @@
<commonModules>CommonModule.ПодпискиНаСобытия</commonModules>
<commonModules>CommonModule.Пользователи</commonModules>
<commonModules>CommonModule.ПомощникТестированияВызовСервера</commonModules>
<commonModules>CommonModule.ТегиТестов</commonModules>
<commonModules>CommonModule.ТестовыеДанные</commonModules>
<catalogs>Catalog.Встречи</catalogs>
<catalogs>Catalog.Товары</catalogs>