mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2024-11-30 08:36:50 +02:00
Оптимизация работы мокито Возможность получать статистику вызова методов объектов через менеджер
This commit is contained in:
parent
374528eee1
commit
4a9a5ab96e
@ -164,15 +164,22 @@
|
||||
|
||||
Процедура ЗарегистрироватьПерехватВыражения(ИмяМетода, ПараметрыВызова)
|
||||
|
||||
Объект = ОбучаемыйОбъект();
|
||||
ДанныеПерехвата = МокитоСлужебный.ДанныеПерехвата(Объект);
|
||||
ПереданаСтруктураВызоваМетода = МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода);
|
||||
|
||||
Если ПереданаСтруктураВызоваМетода Тогда
|
||||
Объект = ИмяМетода.Объект;
|
||||
Иначе
|
||||
Объект = ОбучаемыйОбъект();
|
||||
КонецЕсли;
|
||||
|
||||
ДанныеПерехвата = МокитоСлужебный.НастройкиПерехватаОбъекта(Объект);
|
||||
|
||||
Если ДанныеПерехвата = Неопределено Тогда
|
||||
Сообщение = СтрШаблон("Не найдены настройки перехвата для %1. Необходимо предварительно вызвать метод Мокито.Обучение(Объект)", Объект);
|
||||
ВызватьИсключение Сообщение;
|
||||
КонецЕсли;
|
||||
|
||||
Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
|
||||
Если ПереданаСтруктураВызоваМетода Тогда
|
||||
СтруктураВызоваМетода = ИмяМетода;
|
||||
Иначе
|
||||
СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыВызова);
|
||||
|
@ -35,15 +35,7 @@
|
||||
// Настройки.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Настройки:
|
||||
// * Метод - Строка
|
||||
// * Реакция - Строка
|
||||
// * Перехват - Соответствие
|
||||
// * Режим - Строка - см. РежимыРаботы
|
||||
// * Статистика - Структура - Статистика вызовов:
|
||||
// * Вызовы - Соответствие из Структура
|
||||
// * ПараметрыОбучения - Структура
|
||||
// * ПараметрыПроверки - Структура
|
||||
// см. НовыеНастройки
|
||||
Функция Настройки() Экспорт
|
||||
|
||||
Настройки = ЮТКонтекст.ЗначениеКонтекста(КлючНастроек());
|
||||
@ -93,6 +85,10 @@
|
||||
|
||||
Настройки = Настройки();
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Настройки.Перехват) Или Настройки.ТипыПерехватываемыхОбъектов[ТипЗнч(Объект)] = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыПерехвата = ДанныеПерехвата(Объект, Настройки);
|
||||
|
||||
Если ПараметрыПерехвата = Неопределено Тогда
|
||||
@ -234,11 +230,18 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НастройкиПерехватаОбъекта(Объект) Экспорт
|
||||
|
||||
ПараметрыПерехвата = ПараметрыПерехвата();
|
||||
Возврат ПараметрыПерехвата[Объект];
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Данные перехвата.
|
||||
//
|
||||
// Параметры:
|
||||
// Объект - Произвольный
|
||||
// Настройки - см. Настройки
|
||||
// Настройки - см. НовыеНастройки
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// см. ОписаниеПараметровПерехватаОбъекта
|
||||
@ -282,12 +285,35 @@
|
||||
|
||||
Процедура ДобавитьНастройкуПерехватаВызововОбъекта(Знач Объект, СброситьСтарыеНастройки = Истина) Экспорт
|
||||
|
||||
ПараметрыПерехвата = ПараметрыПерехвата();
|
||||
Настройки = Настройки();
|
||||
|
||||
Если СброситьСтарыеНастройки ИЛИ ПараметрыПерехвата[Объект] = Неопределено Тогда
|
||||
ПараметрыПерехвата.Вставить(Объект, ОписаниеПараметровПерехватаОбъекта(Объект));
|
||||
Если СброситьСтарыеНастройки ИЛИ Настройки.Перехват[Объект] = Неопределено Тогда
|
||||
Настройки.Перехват.Вставить(Объект, ОписаниеПараметровПерехватаОбъекта(Объект));
|
||||
КонецЕсли;
|
||||
|
||||
ТипОбъекта = ТипЗнч(Объект);
|
||||
|
||||
Настройки.ТипыПерехватываемыхОбъектов.Вставить(ТипОбъекта, Истина);
|
||||
|
||||
Если ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипОбъекта) Тогда
|
||||
ТипОбъекта = ЮТТипыДанныхСлужебный.ТипОбъектаСсылки(ТипОбъекта);
|
||||
Настройки.ТипыПерехватываемыхОбъектов.Вставить(ТипОбъекта, Истина);
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипМенеджера(ТипОбъекта) Тогда
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
Описание = ЮТМетаданные.ОписаниеОбъектаМетаданных(ТипОбъекта);
|
||||
|
||||
Если Описание <> Неопределено Тогда
|
||||
Если Описание.ОписаниеТипа.Ссылочный Тогда
|
||||
ТипОбъекта = Тип(СтрШаблон("%1Объект.%2", Описание.ОписаниеТипа.Имя, Описание.Имя));
|
||||
Иначе
|
||||
ТипОбъекта = Тип(СтрШаблон("%НаборЗаписей.%2", Описание.ОписаниеТипа.Имя, Описание.Имя));
|
||||
КонецЕсли;
|
||||
|
||||
Настройки.ТипыПерехватываемыхОбъектов.Вставить(ТипОбъекта, Истина);
|
||||
КонецЕсли;
|
||||
#КонецЕсли
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Описание параметров перехвата объекта.
|
||||
@ -315,11 +341,16 @@
|
||||
|
||||
СтатистикаВызововМетода = Новый Массив();
|
||||
Статистика = Вызовы[Объект];
|
||||
ТипОбъекта = ТипЗнч(Объект);
|
||||
|
||||
Если Статистика <> Неопределено И Статистика.Свойство(ИмяМетода) Тогда
|
||||
СтатистикаВызововМетода = Статистика[ИмяМетода];
|
||||
ИначеЕсли Статистика = Неопределено И ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗнч(Объект)) Тогда
|
||||
ИначеЕсли Статистика = Неопределено И ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипОбъекта) Тогда
|
||||
СтатистикаВызововМетода = СтатистикаВызововПоСсылке(Вызовы, Объект, ИмяМетода);
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипМенеджера(ТипОбъекта) Тогда
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
СтатистикаВызововМетода = СтатистикаВызововПоМенеджеру(Вызовы, Объект, ИмяМетода);
|
||||
#КонецЕсли
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтатистикаВызововМетода;
|
||||
@ -480,19 +511,39 @@
|
||||
|
||||
Процедура ИнициализироватьНастройки() Экспорт
|
||||
|
||||
ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), НовыеНастройки(), Истина);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Новые настройки.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Настройки:
|
||||
// * Метод - Строка
|
||||
// * Реакция - Строка
|
||||
// * Перехват - Соответствие Из Произвольный
|
||||
// * ТипыПерехватываемыхОбъектов - Соответствие Из Тип
|
||||
// * Режим - Строка - см. РежимыРаботы
|
||||
// * Статистика - Структура - Статистика вызовов:
|
||||
// * Вызовы - Соответствие из Структура
|
||||
// * ПараметрыОбучения - Структура
|
||||
// * ПараметрыПроверки - Структура
|
||||
Функция НовыеНастройки()
|
||||
|
||||
Настройки = Новый Структура;
|
||||
Настройки.Вставить("Метод");
|
||||
Настройки.Вставить("Реакция");
|
||||
Настройки.Вставить("Перехват", Новый Соответствие);
|
||||
Настройки.Вставить("ТипыПерехватываемыхОбъектов", Новый Соответствие);
|
||||
Настройки.Вставить("Режим", "НеУстановлен");
|
||||
Настройки.Вставить("Статистика", Новый Структура("Вызовы", Новый Соответствие));
|
||||
|
||||
Настройки.Вставить("ПараметрыОбучения", Неопределено);
|
||||
Настройки.Вставить("ПараметрыПроверки", Неопределено);
|
||||
|
||||
ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Настройки, Истина);
|
||||
Возврат Настройки;
|
||||
|
||||
КонецПроцедуры
|
||||
КонецФункции
|
||||
|
||||
Процедура ОчиститьНастройки() Экспорт
|
||||
|
||||
@ -641,6 +692,35 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда
|
||||
Функция СтатистикаВызововПоМенеджеру(Вызовы, Менеджер, ИмяМетода)
|
||||
|
||||
СтатистикаВызововМетода = Новый Массив();
|
||||
Описание = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер);
|
||||
|
||||
Если Описание = Неопределено Тогда
|
||||
Возврат СтатистикаВызововМетода;
|
||||
КонецЕсли;
|
||||
|
||||
Если Описание.ОписаниеТипа.Ссылочный Тогда
|
||||
ТипОбъекта = Тип(СтрШаблон("%1Объект.%2", Описание.ОписаниеТипа.Имя, Описание.Имя));
|
||||
Иначе
|
||||
ТипОбъекта = Тип(СтрШаблон("%НаборЗаписей.%2", Описание.ОписаниеТипа.Имя, Описание.Имя));
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Элемент Из Вызовы Цикл
|
||||
ПодходящийЭлемент = ТипЗнч(Элемент.Ключ) = ТипОбъекта
|
||||
И Элемент.Значение.Свойство(ИмяМетода);
|
||||
Если ПодходящийЭлемент Тогда
|
||||
ЮТОбщий.ДополнитьМассив(СтатистикаВызововМетода, Элемент.Значение[ИмяМетода]);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтатистикаВызововМетода;
|
||||
|
||||
КонецФункции
|
||||
#КонецЕсли
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -110,6 +110,16 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоТипМенеджера(ТипЗначения) Экспорт
|
||||
|
||||
// TODO придумать другой способ определения типа
|
||||
ПредставлениеТипа = ПредставлениеТипа(ТипЗначения);
|
||||
|
||||
СтрокаПоиска = ?(ЮТЛокальСлужебный.ЭтоАнглийскаяЛокальПлатформы(), " manager:", " менеджер:");
|
||||
Возврат СтрНайти(ПредставлениеТипа, СтрокаПоиска) > 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТипОбъектаСсылки(ТипСсылки) Экспорт
|
||||
|
||||
#Если ВебКлиент Тогда
|
||||
|
@ -215,10 +215,16 @@
|
||||
.Наблюдать("ПередЗаписью")
|
||||
.Прогон();
|
||||
|
||||
ЮТест.ОжидаетЧто(МокитоСлужебный.Настройки()) // Проверка сформированных настроек
|
||||
.Свойство("Перехват").ИмеетСвойство(Справочники.Встречи)
|
||||
.Свойство("ТипыПерехватываемыхОбъектов")
|
||||
.ИмеетДлину(2);
|
||||
|
||||
Справочники.Встречи.СохранитьИзменения(ЮТОбщий.ЗначениеВМассиве(Запись));
|
||||
|
||||
Мокито.Проверить(Справочники.Встречи, "Проверка через менеджер")
|
||||
.КоличествоВызовов("ЗаполнитьОбъект").Равно(1)
|
||||
.КоличествоВызовов("ПередЗаписью").Равно(1)
|
||||
;
|
||||
Мокито.Проверить(Запись.Встреча, "Проверка через ссылку")
|
||||
.КоличествоВызовов("ПередЗаписью").Равно(1)
|
||||
|
Loading…
Reference in New Issue
Block a user