1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-02-07 19:30:17 +02:00

Merge pull request #281 from bia-technologies/feature/276

276 / Возможность задавать разные описания и контексты для тестов с параметрами
This commit is contained in:
Koryakin Aleksey 2024-03-12 00:16:18 +03:00 committed by GitHub
commit a81b711e45
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 557 additions and 211 deletions

View File

@ -377,6 +377,20 @@
КонецФункции
// Формирует текстовое представление массива.
// Пример результата - "[1, 2, 3]"
//
// Параметры:
// Данные - Массив из Строка
//
// Возвращаемое значение:
// Строка
Функция ПредставлениеМассива(Данные) Экспорт
Возврат СтрШаблон("[%1]", СтрСоединить(Данные, ", "));
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -28,25 +28,10 @@
// ТегиСтрокой - Строка - Теги относящиеся к набору и вложенным тестам. Это строка разделенная запятыми
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция ДобавитьТестовыйНабор(Имя, ТегиСтрокой = "") Экспорт
ИсполняемыеСценарии = СценарииМодуля();
Если НЕ ЭтоИсполняемыеСценарии(ИсполняемыеСценарии) Тогда
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии";
КонецЕсли;
Если ПустаяСтрока(Имя) Тогда
ВызватьИсключение "Имя тестового набора не может быть пустым";
КонецЕсли;
Контекст = Контекст();
НовыйТестовыйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, ТегиСтрокой);
ИсполняемыеСценарии.ТестовыеНаборы.Добавить(НовыйТестовыйНабор);
Контекст.ТекущийНабор = НовыйТестовыйНабор;
Контекст.ТекущийЭлемент = НовыйТестовыйНабор;
ЮТТестыСлужебный.ДобавитьТестовыйНабор(Имя, ТегиСтрокой);
Возврат ЮТТесты;
@ -66,25 +51,10 @@
// Контексты - Строка - Контексты, строка перечисления контекстов вызова, разделенных запятой.
// Возможные значения см. ЮТФабрика.КонтекстыВызова
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "", Контексты = Неопределено) Экспорт
Контекст = Контекст();
Набор = Контекст.ТекущийНабор;
ЭтоИсполняемыеСценарии = ЭтоИсполняемыеСценарии(Набор);
ЭтоТестовыйНабор = ЭтоТестовыйНабор(Набор);
Если НЕ (ЭтоИсполняемыеСценарии ИЛИ ЭтоТестовыйНабор) Тогда
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии или ЮТТесты.ТестовыйНабор";
КонецЕсли;
Если ПустаяСтрока(ИмяТестовогоМетода) Тогда
ВызватьИсключение "Имя тестового метода не может быть пустым";
КонецЕсли;
Тест = ОписаниеТеста(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты);
ДобавитьТестВНабор(Контекст, Тест);
ЮТТестыСлужебный.ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты);
Возврат ЮТТесты;
@ -98,10 +68,11 @@
// ТегиСтрокой - Строка - Теги строкой. Это строка разделенная запятыми
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция ДобавитьКлиентскийТест(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "") Экспорт
ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, КонтекстыВызоваКлиента());
ЮТТестыСлужебный.ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, ЮТТестыСлужебный.КонтекстыВызоваКлиента());
Возврат ЮТТесты;
КонецФункции
@ -114,12 +85,11 @@
// ТегиСтрокой - Строка - Теги строкой. Это строка разделенная запятыми
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция ДобавитьСерверныйТест(ИмяТестовогоМетода, ПредставлениеТеста = "", ТегиСтрокой = "") Экспорт
Режимы = ЮТФабрика.КонтекстыВызова();
ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Режимы.Сервер);
КонтекстыВызова = ЮТФабрика.КонтекстыВызова();
ЮТТестыСлужебный.ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, КонтекстыВызова.Сервер);
Возврат ЮТТесты;
@ -132,16 +102,10 @@
// Значение - Произвольный - Значение настройки
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция НастройкаИсполнения(ИмяПараметра, Значение) Экспорт
Контекст = Контекст();
Если Контекст.ТекущийЭлемент = Неопределено Тогда
ВызватьИсключение "Не инициализированы настройки регистрации тестов";
КонецЕсли;
Контекст.ТекущийЭлемент.НастройкиВыполнения.Вставить(ИмяПараметра, Значение);
ЮТТестыСлужебный.НастройкаИсполнения(ИмяПараметра, Значение);
Возврат ЮТТесты;
@ -153,10 +117,10 @@
// ВыполнятьВТранзакции - Булево
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция ВТранзакции(ВыполнятьВТранзакции = Истина) Экспорт
НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции, ВыполнятьВТранзакции);
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().ВТранзакции, ВыполнятьВТранзакции);
Возврат ЮТТесты;
@ -174,10 +138,10 @@
// УдалятьСозданныеДанные - Булево
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция УдалениеТестовыхДанных(УдалятьСозданныеДанные = Истина) Экспорт
НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных, УдалятьСозданныеДанные);
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().УдалениеТестовыхДанных, УдалятьСозданныеДанные);
Возврат ЮТТесты;
@ -189,10 +153,10 @@
// ВыполнитьПеред - Строка - Имя обработчика события, который будет выполнен вместо основного
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция Перед(ВыполнитьПеред = "") Экспорт
НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().Перед, ВыполнитьПеред);
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().Перед, ВыполнитьПеред);
Возврат ЮТТесты;
@ -204,10 +168,10 @@
// ВыполнитьПосле - Строка - Имя обработчика события, который будет выполнен вместо основного
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
Функция После(ВыполнитьПосле = "") Экспорт
НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().После, ВыполнитьПосле);
ЮТТестыСлужебный.НастройкаИсполнения(ЮТФабрика.ПараметрыИсполненияТеста().После, ВыполнитьПосле);
Возврат ЮТТесты;
@ -231,7 +195,7 @@
// Параметр10 - Произвольный
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль, для замыкания
// ОбщийМодуль - Этот же модуль
//
// Примеры:
//
@ -263,159 +227,127 @@
Параметр9,
Параметр10);
Контекст = Контекст();
ЮТТестыСлужебный.СПараметрами(Параметры, Неопределено);
Если Контекст.ТекущийЭлемент = Неопределено Тогда
ВызватьИсключение "Не инициализированы настройки регистрации тестов";
ИначеЕсли НЕ ЭтоОписаниеТеста(Контекст.ТекущийЭлемент) Тогда
ВызватьИсключение "Параметры устанавливаются только для теста";
КонецЕсли;
Возврат ЮТТесты;
Если Контекст.ТекущийЭлемент.Параметры <> Неопределено Тогда
НоваяНастройка = ЮТКоллекции.СкопироватьСтруктуру(Контекст.ТекущийЭлемент);
ДобавитьТестВНабор(Контекст, НоваяНастройка);
КонецЕсли;
КонецФункции
// Устанавливает параметры вызова теста и новый контекст исполнения (клиентский).
//
// * Если метод вызывается первый раз, то он устанавливает параметры теста.
// * Если второй и последующие, то добавляет новый тест с параметрами.
//
// Параметры:
// Параметр1 - Произвольный
// Параметр2 - Произвольный
// Параметр3 - Произвольный
// Параметр4 - Произвольный
// Параметр5 - Произвольный
// Параметр6 - Произвольный
// Параметр7 - Произвольный
// Параметр8 - Произвольный
// Параметр9 - Произвольный
// Параметр10 - Произвольный
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль
//
//@skip-check method-too-many-params
Функция СПараметрамиНаКлиенте(Параметр1 = "_!%*",
Параметр2 = "_!%*",
Параметр3 = "_!%*",
Параметр4 = "_!%*",
Параметр5 = "_!%*",
Параметр6 = "_!%*",
Параметр7 = "_!%*",
Параметр8 = "_!%*",
Параметр9 = "_!%*",
Параметр10 = "_!%*") Экспорт
Контекст.ТекущийЭлемент.Параметры = Параметры;
Параметры = ЮТКоллекции.ЗначениеВМассиве(Параметр1,
Параметр2,
Параметр3,
Параметр4,
Параметр5,
Параметр6,
Параметр7,
Параметр8,
Параметр9,
Параметр10);
ЮТТестыСлужебный.СПараметрами(Параметры, ЮТТестыСлужебный.КонтекстыВызоваКлиента());
Возврат ЮТТесты;
КонецФункции
// Устанавливает параметры вызова теста и новый контекст исполнения (серверный).
//
// * Если метод вызывается первый раз, то он устанавливает параметры теста.
// * Если второй и последующие, то добавляет новый тест с параметрами.
//
// Параметры:
// Параметр1 - Произвольный
// Параметр2 - Произвольный
// Параметр3 - Произвольный
// Параметр4 - Произвольный
// Параметр5 - Произвольный
// Параметр6 - Произвольный
// Параметр7 - Произвольный
// Параметр8 - Произвольный
// Параметр9 - Произвольный
// Параметр10 - Произвольный
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль
//
//@skip-check method-too-many-params
Функция СПараметрамиНаСервере(Параметр1 = "_!%*",
Параметр2 = "_!%*",
Параметр3 = "_!%*",
Параметр4 = "_!%*",
Параметр5 = "_!%*",
Параметр6 = "_!%*",
Параметр7 = "_!%*",
Параметр8 = "_!%*",
Параметр9 = "_!%*",
Параметр10 = "_!%*") Экспорт
Параметры = ЮТКоллекции.ЗначениеВМассиве(Параметр1,
Параметр2,
Параметр3,
Параметр4,
Параметр5,
Параметр6,
Параметр7,
Параметр8,
Параметр9,
Параметр10);
КонтекстыВызова = ЮТФабрика.КонтекстыВызова();
ЮТТестыСлужебный.СПараметрами(Параметры, КонтекстыВызова.Сервер);
Возврат ЮТТесты;
КонецФункции
// Устанавливает представление объекта, может использоваться как для теста, так и для набора.
//
// Параметры:
// Представление - Строка
// ИспользуяИмя - Булево - Необходимо ли использовать имя объекта при формировании представления.
// Ложь - По умолчанию, представление будет установлено по параметру.
// Истина - Новое представление объекта = "<ИмяОбъект>. <Параметр Представление>"
//
// Возвращаемое значение:
// ОбщийМодуль - Этот же модуль
Функция Представление(Представление, ИспользуяИмя = Ложь) Экспорт
ЮТТестыСлужебный.УстановитьПредставление(Представление, ИспользуяИмя);
Возврат ЮТТесты;
КонецФункции
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля) Экспорт
ИнициализироватьКонтекст(МетаданныеМодуля);
ЮТСобытияСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
КонецПроцедуры
Процедура ПослеЧтенияСценариевМодуля() Экспорт
Контекст = Контекст();
ЮТСобытияСлужебный.ПослеЧтенияСценариевМодуля(Контекст.МетаданныеМодуля, Контекст.ИсполняемыеСценарии);
КонецПроцедуры
// Описание сценариев модуля
//
// Возвращаемое значение:
// Структура - см. ИсполняемыеСценарии
Функция СценарииМодуля() Экспорт
Возврат Контекст().ИсполняемыеСценарии;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Исполняемые сценарии.
//
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
//
// Возвращаемое значение:
// Структура - Исполняемые сценарии:
// * ТестовыеНаборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Тестовые наборы модуля
// * НастройкиВыполнения- Структура - Настройки исполнения теста
Функция ИсполняемыеСценарии(МетаданныеМодуля)
Структура = Новый Структура;
Структура.Вставить("ТестовыеНаборы", Новый Массив());
Структура.Вставить("НастройкиВыполнения", Новый Структура());
Набор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
Набор.НастройкиВыполнения = Структура.НастройкиВыполнения; // Общие настройки с набором по умолчанию
Структура.ТестовыеНаборы.Добавить(Набор);
Возврат Структура;
КонецФункции
Функция КонтекстыВызоваКлиента()
Режимы = ЮТФабрика.КонтекстыВызова();
Возврат ЮТКоллекции.ЗначениеВМассиве(Режимы.КлиентУправляемоеПриложение, Режимы.КлиентОбычноеПриложение);
КонецФункции
Функция КонтекстыВызоваПоУмолчанию()
Возврат ЮТФабрикаСлужебный.КонтекстыМодуля(Контекст().МетаданныеМодуля);
КонецФункции
Функция ОписаниеТеста(Имя, Знач Представление, ТегиСтрокой, Знач Контексты)
Если НЕ ЗначениеЗаполнено(Контексты) Тогда
Контексты = КонтекстыВызоваПоУмолчанию();
ИначеЕсли ТипЗнч(Контексты) = Тип("Строка") Тогда
Контексты = СтрРазделить(Контексты, ", ", Ложь);
КонецЕсли;
Возврат ЮТФабрикаСлужебный.ОписаниеТеста(Имя, Представление, Контексты, ТегиСтрокой);
КонецФункции
Функция ЭтоИсполняемыеСценарии(ИсполняемыеСценарии)
Возврат ТипЗнч(ИсполняемыеСценарии) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ИсполняемыеСценарии, "ТестовыеНаборы")) = Тип("Массив");
КонецФункции
Функция ЭтоТестовыйНабор(ТестовыйНабор)
Возврат ТипЗнч(ТестовыйНабор) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ТестовыйНабор, "Тесты")) = Тип("Массив");
КонецФункции
Функция ЭтоОписаниеТеста(Описание)
Возврат ТипЗнч(Описание) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(Описание, "КонтекстВызова")) = Тип("Массив");
КонецФункции
Процедура ДобавитьТестВНабор(Контекст, Тест)
Контекст.ТекущийНабор.Тесты.Добавить(Тест);
Контекст.ТекущийЭлемент = Тест;
Тест.НомерВНаборе = Контекст.ТекущийНабор.Тесты.Количество();
КонецПроцедуры
#Область Контекст
Функция Контекст()
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("КонтекстРегистрацияТестов");
КонецФункции
Процедура ИнициализироватьКонтекст(МетаданныеМодуля)
ИсполняемыеСценарии = ИсполняемыеСценарии(МетаданныеМодуля);
Набор = ИсполняемыеСценарии.ТестовыеНаборы[0];
Контекст = Новый Структура();
Контекст.Вставить("МетаданныеМодуля", МетаданныеМодуля);
Контекст.Вставить("ИсполняемыеСценарии", ИсполняемыеСценарии);
Контекст.Вставить("ТекущийНабор", Набор);
Контекст.Вставить("ТекущийЭлемент", Набор);
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("КонтекстРегистрацияТестов", Контекст);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -0,0 +1,287 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 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.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Область СлужебныйПрограммныйИнтерфейс
Процедура ДобавитьТестовыйНабор(Имя, ТегиСтрокой) Экспорт
ИсполняемыеСценарии = СценарииМодуля();
Если НЕ ЭтоИсполняемыеСценарии(ИсполняемыеСценарии) Тогда
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии";
КонецЕсли;
Если ПустаяСтрока(Имя) Тогда
ВызватьИсключение "Имя тестового набора не может быть пустым";
КонецЕсли;
Контекст = Контекст();
НовыйТестовыйНабор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(Имя, ТегиСтрокой);
ИсполняемыеСценарии.ТестовыеНаборы.Добавить(НовыйТестовыйНабор);
Контекст.ТекущийНабор = НовыйТестовыйНабор;
Контекст.ТекущийЭлемент = НовыйТестовыйНабор;
КонецПроцедуры
Процедура ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты) Экспорт
Контекст = Контекст();
Набор = Контекст.ТекущийНабор;
ЭтоИсполняемыеСценарии = ЭтоИсполняемыеСценарии(Набор);
ЭтоТестовыйНабор = ЭтоТестовыйНабор(Набор);
Если НЕ (ЭтоИсполняемыеСценарии ИЛИ ЭтоТестовыйНабор) Тогда
ВызватьИсключение "Первый параметр должен быть результатом метода ЮТТесты.ИсполняемыеСценарии или ЮТТесты.ТестовыйНабор";
КонецЕсли;
Если ПустаяСтрока(ИмяТестовогоМетода) Тогда
ВызватьИсключение "Имя тестового метода не может быть пустым";
КонецЕсли;
Тест = ОписаниеТеста(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Контексты);
ДобавитьТестВНабор(Контекст, Тест, Ложь);
КонецПроцедуры
Процедура ДобавитьКлиентскийТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой) Экспорт
ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, КонтекстыВызоваКлиента());
КонецПроцедуры
Процедура ДобавитьСерверныйТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой) Экспорт
Режимы = ЮТФабрика.КонтекстыВызова();
ДобавитьТест(ИмяТестовогоМетода, ПредставлениеТеста, ТегиСтрокой, Режимы.Сервер);
КонецПроцедуры
Процедура НастройкаИсполнения(ИмяПараметра, Значение) Экспорт
Контекст = Контекст();
Если Контекст.ТекущийЭлемент = Неопределено Тогда
ВызватьИсключение "Не инициализированы настройки регистрации тестов";
КонецЕсли;
Контекст.ТекущийЭлемент.НастройкиВыполнения.Вставить(ИмяПараметра, Значение);
КонецПроцедуры
Процедура СПараметрами(Параметры, Знач НовыеКонтексты) Экспорт
Контекст = Контекст();
Если Контекст.ТекущийЭлемент = Неопределено Тогда
ВызватьИсключение "Не инициализированы настройки регистрации тестов";
ИначеЕсли НЕ ЭтоОписаниеТеста(Контекст.ТекущийЭлемент) Тогда
ВызватьИсключение "Параметры устанавливаются только для теста";
КонецЕсли;
ЭтоПервыйВызовСПараметрами = Контекст.ТекущийЭлемент.Параметры = Неопределено;
УстановитьНовыйКонтекст = ЗначениеЗаполнено(НовыеКонтексты);
Если ЭтоПервыйВызовСПараметрами Тогда
Контекст.БазовыйТест = ЮТКоллекции.СкопироватьСтруктуру(Контекст.ТекущийЭлемент);
КонецЕсли;
Если УстановитьНовыйКонтекст Тогда
НормализованныеКонтексты = НормализованныеКонтексты(НовыеКонтексты);
НовыеКонтексты = ЮТКоллекции.ПересечениеМассивов(Контекст.БазовыйТест.КонтекстВызова, НормализованныеКонтексты);
Если НЕ ЗначениеЗаполнено(НовыеКонтексты) Тогда
ВызватьИсключение СтрШаблон("Не пересекаются контексты базового теста %1 и устанавливаемые %2",
ЮТКоллекции.ПредставлениеМассива(Контекст.БазовыйТест.КонтекстВызова),
ЮТКоллекции.ПредставлениеМассива(НормализованныеКонтексты));
КонецЕсли;
КонецЕсли;
Если НЕ ЭтоПервыйВызовСПараметрами Тогда
НоваяНастройка = ЮТКоллекции.СкопироватьСтруктуру(Контекст.БазовыйТест);
ДобавитьТестВНабор(Контекст, НоваяНастройка, Истина);
КонецЕсли;
Контекст.ТекущийЭлемент.Параметры = Параметры;
Если УстановитьНовыйКонтекст Тогда
Контекст.ТекущийЭлемент.КонтекстВызова = НовыеКонтексты;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьПредставление(Представление, ИспользуяИмя) Экспорт
ТекущийЭлемент = Контекст().ТекущийЭлемент;
Если ИспользуяИмя Тогда
ТекущийЭлемент.Представление = СтрШаблон("%1. %2", ТекущийЭлемент.Имя, Представление);
Иначе
ТекущийЭлемент.Представление = Представление;
КонецЕсли;
КонецПроцедуры
Функция КонтекстыВызоваКлиента() Экспорт
Режимы = ЮТФабрика.КонтекстыВызова();
Возврат ЮТКоллекции.ЗначениеВМассиве(Режимы.КлиентУправляемоеПриложение, Режимы.КлиентОбычноеПриложение);
КонецФункции
// Описание сценариев модуля
//
// Возвращаемое значение:
// Структура - см. ИсполняемыеСценарии
Функция СценарииМодуля() Экспорт
Возврат Контекст().ИсполняемыеСценарии;
КонецФункции
Функция Контекст() Экспорт
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("КонтекстРегистрацияТестов");
КонецФункции
#Область ОбработчикиСобытий
Процедура ПередЧтениемСценариевМодуля(МетаданныеМодуля) Экспорт
ИнициализироватьКонтекст(МетаданныеМодуля);
ЮТСобытияСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
КонецПроцедуры
Процедура ПослеЧтенияСценариевМодуля() Экспорт
Контекст = Контекст();
ЮТСобытияСлужебный.ПослеЧтенияСценариевМодуля(Контекст.МетаданныеМодуля, Контекст.ИсполняемыеСценарии);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Исполняемые сценарии.
//
// Параметры:
// МетаданныеМодуля - см. ЮТФабрикаСлужебный.ОписаниеМодуля
//
// Возвращаемое значение:
// Структура - Исполняемые сценарии:
// * ТестовыеНаборы - Массив из см. ЮТФабрикаСлужебный.ОписаниеТестовогоНабора - Тестовые наборы модуля
// * НастройкиВыполнения- Структура - Настройки исполнения теста
Функция ИсполняемыеСценарии(МетаданныеМодуля)
Структура = Новый Структура;
Структура.Вставить("ТестовыеНаборы", Новый Массив());
Структура.Вставить("НастройкиВыполнения", Новый Структура());
Набор = ЮТФабрикаСлужебный.ОписаниеТестовогоНабора(МетаданныеМодуля.Имя);
Набор.НастройкиВыполнения = Структура.НастройкиВыполнения; // Общие настройки с набором по умолчанию
Структура.ТестовыеНаборы.Добавить(Набор);
Возврат Структура;
КонецФункции
Функция КонтекстыВызоваПоУмолчанию()
Возврат ЮТФабрикаСлужебный.КонтекстыМодуля(Контекст().МетаданныеМодуля);
КонецФункции
Функция ОписаниеТеста(Имя, Знач Представление, ТегиСтрокой, Знач Контексты)
Контексты = НормализованныеКонтексты(Контексты);
Возврат ЮТФабрикаСлужебный.ОписаниеТеста(Имя, Представление, Контексты, ТегиСтрокой);
КонецФункции
Функция ЭтоИсполняемыеСценарии(ИсполняемыеСценарии)
Возврат ТипЗнч(ИсполняемыеСценарии) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ИсполняемыеСценарии, "ТестовыеНаборы")) = Тип("Массив");
КонецФункции
Функция ЭтоТестовыйНабор(ТестовыйНабор)
Возврат ТипЗнч(ТестовыйНабор) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(ТестовыйНабор, "Тесты")) = Тип("Массив");
КонецФункции
Функция ЭтоОписаниеТеста(Описание)
Возврат ТипЗнч(Описание) = Тип("Структура")
И ТипЗнч(ЮТКоллекции.ЗначениеСтруктуры(Описание, "КонтекстВызова")) = Тип("Массив");
КонецФункции
Процедура ДобавитьТестВНабор(Контекст, Тест, ЭтоКопия)
Если НЕ ЭтоКопия Тогда
Контекст.БазовыйТест = Неопределено;
КонецЕсли;
Контекст.ТекущийНабор.Тесты.Добавить(Тест);
Контекст.ТекущийЭлемент = Тест;
Тест.НомерВНаборе = Контекст.ТекущийНабор.Тесты.Количество();
КонецПроцедуры
Процедура ИнициализироватьКонтекст(МетаданныеМодуля)
ИсполняемыеСценарии = ИсполняемыеСценарии(МетаданныеМодуля);
Набор = ИсполняемыеСценарии.ТестовыеНаборы[0];
Контекст = Новый Структура();
Контекст.Вставить("МетаданныеМодуля", МетаданныеМодуля);
Контекст.Вставить("ИсполняемыеСценарии", ИсполняемыеСценарии);
Контекст.Вставить("ТекущийНабор", Набор);
Контекст.Вставить("ТекущийЭлемент", Набор);
Контекст.Вставить("БазовыйТест", Неопределено);
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("КонтекстРегистрацияТестов", Контекст);
КонецПроцедуры
Функция НормализованныеКонтексты(ПараметрКонтексты)
Если НЕ ЗначениеЗаполнено(ПараметрКонтексты) Тогда
Контексты = КонтекстыВызоваПоУмолчанию();
ИначеЕсли ТипЗнч(ПараметрКонтексты) = Тип("Строка") Тогда
Контексты = СтрРазделить(ПараметрКонтексты, ", ", Ложь);
Иначе
Контексты = ПараметрКонтексты;
КонецЕсли;
Возврат Контексты;
КонецФункции
#КонецОбласти

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="d30c1fb4-a799-475b-8e62-38f8297df916">
<name>ЮТТестыСлужебный</name>
<synonym>
<key>ru</key>
<value>Тесты служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -87,6 +87,13 @@
КонецФункции
// Возвращает перечисление возможные уровнией исполнения тестрв.
//
// Возвращаемое значение:
// ФиксированнаяСтруктура - Уровни исполнения:
// * Модуль - Строка
// * НаборТестов - Строка
// * Тест - Строка
Функция УровниИсполнения() Экспорт
Уровни = Новый Структура;
@ -185,6 +192,16 @@
КонецФункции
// Параметры создания объектов, используется при загрузке макетов.
//
// Параметры:
// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи
// ФикцияОбязательныхПолей - Булево - Фикция обязательных полей
//
// Возвращаемое значение:
// Структура - Параметры создания объектов:
// * ФикцияОбязательныхПолей - Булево
// * ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи
Функция ПараметрыСозданияОбъектов(Знач ПараметрыЗаписи = Неопределено, ФикцияОбязательныхПолей = Ложь) Экспорт
Если ПараметрыЗаписи = Неопределено Тогда

View File

@ -60,7 +60,7 @@
ЭтоТестовыйМодуль = Истина;
ОписаниеТестовогоМодуля = ЮТФабрикаСлужебный.ОписаниеТестовогоМодуля(МетаданныеМодуля, Новый Массив);
ЮТТесты.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
ЮТТестыСлужебный.ПередЧтениемСценариевМодуля(МетаданныеМодуля);
ПолноеИмяМетода = МетаданныеМодуля.Имя + "." + ИмяМетодаСценариев();
Ошибка = ЮТМетодыСлужебный.ВыполнитьМетод(ПолноеИмяМетода);
@ -88,8 +88,8 @@
ИначеЕсли ЭтоТестовыйМодуль Тогда
ЮТТесты.ПослеЧтенияСценариевМодуля();
Сценарии = ЮТТесты.СценарииМодуля();
ЮТТестыСлужебный.ПослеЧтенияСценариевМодуля();
Сценарии = ЮТТестыСлужебный.СценарииМодуля();
УдалитьНастройкиМодуляИзПервогоНабора(Сценарии); // TODO Нужен рефакторинг

View File

@ -114,6 +114,7 @@
<commonModules>CommonModule.ЮТТестовыеДанныеСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.ЮТТестовыеДанныеСлужебныйТаблицыЗначений</commonModules>
<commonModules>CommonModule.ЮТТесты</commonModules>
<commonModules>CommonModule.ЮТТестыСлужебный</commonModules>
<commonModules>CommonModule.ЮТТипыДанныхСлужебный</commonModules>
<commonModules>CommonModule.ЮТУтверждения</commonModules>
<commonModules>CommonModule.ЮТУтвержденияИБ</commonModules>

View File

@ -15,6 +15,7 @@
<content>CommonModule.ЮТИсполнительСлужебныйКлиент</content>
<content>CommonModule.ЮТИсполнительСлужебныйКлиентСервер</content>
<content>CommonModule.ЮТПараметрыЗапускаСлужебный</content>
<content>CommonModule.ЮТТестыСлужебный</content>
<content>CommonModule.ЮТФильтрацияСлужебный</content>
<content>CommonModule.ЮТЧитательСлужебный</content>
<content>CommonModule.ЮТЧитательСлужебныйВызовСервера</content>

View File

@ -22,6 +22,9 @@
ЮТТесты
.ДобавитьТест("СПараметрами")
.ДобавитьТест("Представление")
.ДобавитьТест("СПараметрамиНаКлиенте")
.ДобавитьТест("СПараметрамиНаСервере")
;
КонецПроцедуры
@ -29,7 +32,11 @@
Процедура ПередКаждымТестом() Экспорт
ОписаниеМодуля = ЮТФабрикаСлужебный.ОписаниеМодуля();
ЮТТесты.ПередЧтениемСценариевМодуля(ОписаниеМодуля);
ОписаниеМодуля.КлиентУправляемоеПриложение = Истина;
ОписаниеМодуля.КлиентОбычноеПриложение = Истина;
ОписаниеМодуля.Сервер = Истина;
ЮТТестыСлужебный.ПередЧтениемСценариевМодуля(ОписаниеМодуля);
КонецПроцедуры
@ -44,7 +51,7 @@
.СПараметрами(3)
;
ЮТест.ОжидаетЧто(Контекст().ТекущийНабор.Тесты)
ЮТест.ОжидаетЧто(ТестыТекущегоНабора())
.ИмеетДлину(5)
.Свойство("[0].Параметры").ЭтоНеопределено()
.Свойство("[1].Параметры").ИмеетДлину(3)
@ -58,13 +65,89 @@
КонецПроцедуры
Процедура Представление() Экспорт
ЮТТесты
.ДобавитьТестовыйНабор("Набор1").Представление("Представление набора")
.ДобавитьТест("Тест1").Представление("Представление теста")
.ДобавитьТест("Тест2")
.СПараметрами(1).Представление("Представление теста 2", Истина)
.СПараметрами(2).Представление("Представление теста 3")
;
ЮТест.ОжидаетЧто(ТекущийНабор())
.Свойство("Представление").Равно("Представление набора")
.Свойство("Тесты[0].Представление").Равно("Представление теста")
.Свойство("Тесты[1].Представление").Равно("Тест2. Представление теста 2")
.Свойство("Тесты[2].Представление").Равно("Представление теста 3");
КонецПроцедуры
Процедура СПараметрамиНаКлиенте() Экспорт
КонтекстыВызова = ЮТФабрика.КонтекстыВызова();
ЮТТесты
.ДобавитьКлиентскийТест("Тест1")
.СПараметрамиНаКлиенте(1)
.ДобавитьТест("Тест2")
.СПараметрамиНаКлиенте(1, 2, 3)
.СПараметрами(2)
;
ЮТест.ОжидаетЧто(ТестыТекущегоНабора())
.ИмеетДлину(3)
.Свойство("[0].Параметры").ИмеетДлину(1)
.Свойство("[0].КонтекстВызова").Равно(ЮТКоллекции.ЗначениеВМассиве(КонтекстыВызова.КлиентУправляемоеПриложение, КонтекстыВызова.КлиентОбычноеПриложение))
.Свойство("[1].Параметры").ИмеетДлину(3)
.Свойство("[1].КонтекстВызова").Равно(ЮТКоллекции.ЗначениеВМассиве(КонтекстыВызова.КлиентУправляемоеПриложение, КонтекстыВызова.КлиентОбычноеПриложение))
.Свойство("[2].КонтекстВызова").ИмеетДлину(3)
;
ЮТест.ОжидаетЧто(ЮТТесты.ДобавитьСерверныйТест("Тест3"))
.Метод("СПараметрамиНаКлиенте").Параметр(1)
.ВыбрасываетИсключение("Не пересекаются контексты базового теста [Сервер] и устанавливаемые [КлиентУправляемоеПриложение, КлиентОбычноеПриложение]");
КонецПроцедуры
Процедура СПараметрамиНаСервере() Экспорт
КонтекстыВызова = ЮТФабрика.КонтекстыВызова();
ЮТТесты
.ДобавитьСерверныйТест("Тест1")
.СПараметрамиНаСервере(1)
.ДобавитьТест("Тест2")
.СПараметрамиНаСервере(1, 2, 3)
.СПараметрами(2)
;
ЮТест.ОжидаетЧто(ТестыТекущегоНабора())
.ИмеетДлину(3)
.Свойство("[0].Параметры").ИмеетДлину(1)
.Свойство("[0].КонтекстВызова").Равно(ЮТКоллекции.ЗначениеВМассиве(КонтекстыВызова.Сервер))
.Свойство("[1].Параметры").ИмеетДлину(3)
.Свойство("[1].КонтекстВызова").Равно(ЮТКоллекции.ЗначениеВМассиве(КонтекстыВызова.Сервер))
.Свойство("[2].КонтекстВызова").ИмеетДлину(3)
;
ЮТест.ОжидаетЧто(ЮТТесты.ДобавитьКлиентскийТест("Тест3"))
.Метод("СПараметрамиНаСервере").Параметр(1)
.ВыбрасываетИсключение("Не пересекаются контексты базового теста [КлиентУправляемоеПриложение, КлиентОбычноеПриложение] и устанавливаемые [Сервер]");
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция Контекст()
Функция ТекущийНабор()
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("КонтекстРегистрацияТестов");
Возврат ЮТТестыСлужебный.Контекст().ТекущийНабор;
КонецФункции
Функция ТестыТекущегоНабора()
Возврат ТекущийНабор().Тесты;
КонецФункции