mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2024-11-30 08:36:50 +02:00
Получение статистики вызовов объекта через ссылку Исправлена ошибка формирования сообщения об ошибке Добавлена возможность указывать описание проверки
This commit is contained in:
parent
bf95ea3875
commit
3dcd1e2250
@ -87,15 +87,15 @@
|
||||
//
|
||||
// Параметры:
|
||||
// Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять.
|
||||
//
|
||||
// Описание - Строка - Описание проверки, которое будет выведено при возникновении ошибки
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - см. МокитоПроверки
|
||||
Функция Проверить(Объект) Экспорт
|
||||
Функция Проверить(Объект, Описание = Неопределено) Экспорт
|
||||
|
||||
Режимы = МокитоСлужебный.РежимыРаботы();
|
||||
МокитоСлужебный.УстановитьРежим(Режимы.Проверка);
|
||||
|
||||
Возврат МокитоПроверки.Проверить(Объект);
|
||||
Возврат МокитоПроверки.Проверить(Объект, Описание);
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -19,9 +19,9 @@
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// см. Мокито.Проверить
|
||||
Функция Проверить(Объект) Экспорт
|
||||
Функция Проверить(Объект, Описание) Экспорт
|
||||
|
||||
УстановитьПараметрыПроверки(Объект);
|
||||
УстановитьПараметрыПроверки(Объект, Описание);
|
||||
Возврат МокитоПроверки;
|
||||
|
||||
КонецФункции
|
||||
@ -70,11 +70,13 @@
|
||||
// ОбщийМодуль - Этот же модуль, для замыкания
|
||||
Функция Равно(Количество, Знач Описание = Неопределено) Экспорт
|
||||
|
||||
Настройки = ПараметрыПроверки();
|
||||
|
||||
Статистика = СтатистикаВызовов();
|
||||
ЮТУтверждения
|
||||
.Что(Статистика, Описание)
|
||||
.Что(Статистика, Настройки.Описание)
|
||||
.ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
|
||||
.ИмеетДлину(Количество);
|
||||
.ИмеетДлину(Количество, Описание);
|
||||
|
||||
Возврат МокитоПроверки;
|
||||
|
||||
@ -168,17 +170,17 @@
|
||||
// Структура:
|
||||
// * ПроверяемыйОбъект - Произвольный
|
||||
// * СтруктураВызоваМетода - см. МокитоСлужебный.СтруктураВызоваМетода
|
||||
// * Описание - Строка
|
||||
Функция ПараметрыПроверки()
|
||||
|
||||
Параметры = МокитоСлужебный.Настройки().ПараметрыПроверки;
|
||||
Возврат Параметры;
|
||||
Возврат МокитоСлужебный.Настройки().ПараметрыПроверки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура УстановитьПараметрыПроверки(Объект = Неопределено, СтруктураВызоваМетода = Неопределено)
|
||||
Процедура УстановитьПараметрыПроверки(Объект, Описание)
|
||||
|
||||
ПараметрыОбучения = Новый Структура("ПроверяемыйОбъект, СтруктураВызоваМетода", Объект, СтруктураВызоваМетода);
|
||||
МокитоСлужебный.Настройки().ПараметрыПроверки = ПараметрыОбучения;
|
||||
ПараметрыПроверки = Новый Структура("ПроверяемыйОбъект, Описание, СтруктураВызоваМетода", Объект, Описание);
|
||||
МокитоСлужебный.Настройки().ПараметрыПроверки = ПараметрыПроверки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -298,17 +298,18 @@
|
||||
|
||||
Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт
|
||||
|
||||
Если ЭтоОбъект(Объект) Тогда
|
||||
Объект = Объект.Ссылка;
|
||||
Вызовы = Настройки().Статистика.Вызовы;
|
||||
|
||||
СтатистикаВызововМетода = Новый Массив();
|
||||
Статистика = Вызовы[Объект];
|
||||
|
||||
Если Статистика <> Неопределено И Статистика.Свойство(ИмяМетода) Тогда
|
||||
СтатистикаВызововМетода = Статистика[ИмяМетода];
|
||||
ИначеЕсли Статистика = Неопределено И ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗнч(Объект)) Тогда
|
||||
СтатистикаВызововМетода = СтатистикаВызововПоСсылке(Вызовы, Объект, ИмяМетода);
|
||||
КонецЕсли;
|
||||
|
||||
Статистика = Настройки().Статистика.Вызовы[Объект];
|
||||
|
||||
Если Статистика = Неопределено ИЛИ НЕ Статистика.Свойство(ИмяМетода) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Статистика[ИмяМетода];
|
||||
Возврат СтатистикаВызововМетода;
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -343,35 +344,6 @@
|
||||
|
||||
#Область ОбработкаВызовов
|
||||
|
||||
// Зарегистрировать вызов метода.
|
||||
//
|
||||
// Параметры:
|
||||
// Настройки - см. ИнициализироватьНастройки
|
||||
// ПараметрыПерехвата - см. ДанныеПерехвата
|
||||
// СтруктураВызоваМетода - см. СтруктураВызоваМетода
|
||||
Процедура ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода)
|
||||
|
||||
Объект = ПараметрыПерехвата.Объект;
|
||||
ИмяМетода = СтруктураВызоваМетода.ИмяМетода;
|
||||
Статистика = Настройки.Статистика.Вызовы[Объект];
|
||||
|
||||
Если Статистика = Неопределено Тогда
|
||||
|
||||
Статистика = Новый Структура;
|
||||
Настройки.Статистика.Вызовы.Вставить(Объект, Статистика);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ Статистика.Свойство(ИмяМетода) Тогда
|
||||
|
||||
Статистика.Вставить(ИмяМетода, Новый Массив);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Статистика[ИмяМетода].Добавить(СтруктураВызоваМетода);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение)
|
||||
|
||||
Если НЕ ПараметрыПерехвата.Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда
|
||||
@ -539,7 +511,7 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Функция ЭтоСсылка(Значение) Экспорт
|
||||
Функция ЭтоСсылка(Значение)
|
||||
|
||||
Если Значение <> Неопределено Тогда
|
||||
|
||||
@ -556,7 +528,7 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоОбъект(Значение) Экспорт
|
||||
Функция ЭтоОбъект(Значение)
|
||||
|
||||
Если Значение <> Неопределено И ЮТОбщий.ПеременнаяСодержитСвойство(Значение, "Ссылка") Тогда
|
||||
|
||||
@ -608,4 +580,54 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Область Статистика
|
||||
|
||||
// Зарегистрировать вызов метода.
|
||||
//
|
||||
// Параметры:
|
||||
// Настройки - см. ИнициализироватьНастройки
|
||||
// ПараметрыПерехвата - см. ДанныеПерехвата
|
||||
// СтруктураВызоваМетода - см. СтруктураВызоваМетода
|
||||
Процедура ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода)
|
||||
|
||||
Объект = СтруктураВызоваМетода.Объект;
|
||||
ИмяМетода = СтруктураВызоваМетода.ИмяМетода;
|
||||
Статистика = Настройки.Статистика.Вызовы[Объект];
|
||||
|
||||
Если Статистика = Неопределено Тогда
|
||||
|
||||
Статистика = Новый Структура;
|
||||
Настройки.Статистика.Вызовы.Вставить(Объект, Статистика);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если НЕ Статистика.Свойство(ИмяМетода) Тогда
|
||||
|
||||
Статистика.Вставить(ИмяМетода, Новый Массив);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Статистика[ИмяМетода].Добавить(СтруктураВызоваМетода);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция СтатистикаВызововПоСсылке(Вызовы, Ссылка, ИмяМетода)
|
||||
|
||||
СтатистикаВызововМетода = Новый Массив();
|
||||
|
||||
Для Каждого Элемент Из Вызовы Цикл
|
||||
ПодходящийЭлемент = ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗнч(Элемент.Ключ))
|
||||
И Элемент.Ключ.Ссылка = Ссылка
|
||||
И Элемент.Значение.Свойство(ИмяМетода);
|
||||
Если ПодходящийЭлемент Тогда
|
||||
ЮТОбщий.ДополнитьМассив(СтатистикаВызововМетода, Элемент.Значение[ИмяМетода]);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтатистикаВызововМетода;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -361,12 +361,15 @@
|
||||
//
|
||||
Функция СкопироватьМассив(МассивИсточник) Экспорт
|
||||
|
||||
МассивРезультат = Новый Массив;
|
||||
Если НЕ ЗначениеЗаполнено(МассивИсточник) Тогда
|
||||
Возврат Новый Массив;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Элемент Из МассивИсточник Цикл
|
||||
|
||||
МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент));
|
||||
|
||||
Размер = МассивИсточник.Количество();
|
||||
МассивРезультат = Новый Массив(Размер);
|
||||
|
||||
Для Инд = 0 По Размер - 1 Цикл
|
||||
МассивРезультат[Инд] = СкопироватьРекурсивно(МассивИсточник[Инд]);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МассивРезультат;
|
||||
|
@ -328,9 +328,8 @@
|
||||
Функция КлючЗаписи(Объект)
|
||||
|
||||
ТипЗначения = ТипЗнч(Объект);
|
||||
ПредставлениеТипа = ЮТОбщий.ПредставлениеТипа(ТипЗначения);
|
||||
|
||||
Если СтрНайти(ПредставлениеТипа, "Object.") Тогда
|
||||
Если ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда
|
||||
|
||||
Возврат Объект.Ссылка;
|
||||
|
||||
|
@ -102,6 +102,14 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоТипОбъекта(ТипЗначения) Экспорт
|
||||
|
||||
ПредставлениеТипа = ЮТОбщий.ПредставлениеТипа(ТипЗначения);
|
||||
|
||||
Возврат СтрНайти(ПредставлениеТипа, "Object.");
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Область СистемныеПеречисления
|
||||
|
||||
Функция ЭтоСистемноеПеречисление(Тип) Экспорт
|
||||
|
@ -1828,13 +1828,13 @@
|
||||
#Область Предикаты
|
||||
|
||||
Процедура ПроверитьПредикат(Выражение, ОжидаемоеЗначение, ОписаниеПроверки, ПараметрыСравнения = Неопределено)
|
||||
|
||||
|
||||
Контекст = Контекст();
|
||||
Предикат = ЮТФабрика.ВыражениеПредиката(Выражение, Контекст.ОбъектПроверки.ИмяСвойства, ОжидаемоеЗначение);
|
||||
|
||||
ПолноеОписаниеПроверки = ЮТОбщий.ДобавитьСтроку(Контекст.ПрефиксОшибки, ОписаниеПроверки, " ");
|
||||
|
||||
ПараметрыСообщенийОбОшибке = ЮТПредикатыКлиентСервер.ПараметрыСообщенийОбОшибке(ПолноеОписаниеПроверки);
|
||||
ПараметрыСообщенийОбОшибке = ЮТПредикатыКлиентСервер.ПараметрыСообщенийОбОшибке(ПолноеОписаниеПроверки, , Контекст.ОбъектПроверки.Представление);
|
||||
Результат = ЮТПредикатыКлиентСервер.ПроверитьПредикаты(Контекст.ОбъектПроверки.Значение, Предикат, ПараметрыСообщенийОбОшибке, ПараметрыСравнения);
|
||||
|
||||
ОбработатьРезультатПроверкиПредиката(Результат);
|
||||
|
@ -13,17 +13,7 @@
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ВстречаОбъект.Начало = ОбрабатываемыйЭлемент.Начало;
|
||||
ВстречаОбъект.Окончание = ОбрабатываемыйЭлемент.Конец;
|
||||
|
||||
Пользователь = ОбрабатываемыйЭлемент.Владелец;
|
||||
Если Пользователь = Неопределено Тогда
|
||||
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
|
||||
КонецЕсли;
|
||||
|
||||
Владелец = Справочники.Пользователи.НайтиПоКоду(Пользователь);
|
||||
ВстречаОбъект.Владелец = Владелец;
|
||||
|
||||
ЗаполнитьОбъект(ВстречаОбъект, ОбрабатываемыйЭлемент);
|
||||
ВстречаОбъект.Записать();
|
||||
|
||||
КонецЦикла;
|
||||
@ -41,3 +31,18 @@
|
||||
Возврат Успешно;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьОбъект(Объект, ОбрабатываемыйЭлемент)
|
||||
|
||||
Объект.Начало = ОбрабатываемыйЭлемент.Начало;
|
||||
Объект.Окончание = ОбрабатываемыйЭлемент.Конец;
|
||||
|
||||
Пользователь = ОбрабатываемыйЭлемент.Владелец;
|
||||
Если Пользователь = Неопределено Тогда
|
||||
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
|
||||
КонецЕсли;
|
||||
|
||||
Владелец = Справочники.Пользователи.НайтиПоКоду(Пользователь.Имя);
|
||||
Объект.Владелец = Владелец;
|
||||
|
||||
КонецПроцедуры
|
||||
|
@ -31,3 +31,17 @@
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
&Вместо("ЗаполнитьОбъект")
|
||||
Процедура Расш1_ЗаполнитьОбъект(Объект, ОбрабатываемыйЭлемент) Экспорт
|
||||
|
||||
ПараметрыМетода = Мокито.МассивПараметров(Объект, ОбрабатываемыйЭлемент);
|
||||
|
||||
ПрерватьВыполнение = Ложь;
|
||||
Мокито.АнализВызова(Справочники.Встречи, "ЗаполнитьОбъект", ПараметрыМетода, ПрерватьВыполнение);
|
||||
|
||||
Если НЕ ПрерватьВыполнение Тогда
|
||||
ПродолжитьВызов(Объект, ОбрабатываемыйЭлемент);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
@ -31,3 +31,17 @@
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
&Вместо("ПередЗаписью")
|
||||
Процедура Расш1_ПередЗаписью(Отказ)
|
||||
|
||||
ПараметрыМетода = Мокито.МассивПараметров(Отказ);
|
||||
|
||||
ПрерватьВыполнение = Ложь;
|
||||
Мокито.АнализВызова(ЭтотОбъект, "ПередЗаписью", ПараметрыМетода, ПрерватьВыполнение);
|
||||
|
||||
Если НЕ ПрерватьВыполнение Тогда
|
||||
ПродолжитьВызов(Отказ);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
@ -28,6 +28,7 @@
|
||||
.ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов").ВТранзакции()
|
||||
.ДобавитьТест("ОшибкаПодбораРеакции")
|
||||
.ДобавитьТест("ИспользованиеПредикатов")
|
||||
.ДобавитьСерверныйТест("МокированиеЧерезМенеджер")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -197,6 +198,32 @@
|
||||
.Равно(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура МокированиеЧерезМенеджер() Экспорт
|
||||
|
||||
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
|
||||
ПараметрыЗаписи.ОбменДаннымиЗагрузка = Истина;
|
||||
|
||||
Запись = Новый Структура("Встреча, Начало, Конец, Владелец");
|
||||
Запись.Встреча = ЮТест.Данные().СоздатьЭлемент(Справочники.Встречи, , , ПараметрыЗаписи);
|
||||
|
||||
Мокито.Обучение(Справочники.Встречи)
|
||||
.Наблюдать("СохранитьИзменения")
|
||||
.Наблюдать("ЗаполнитьОбъект")
|
||||
.Наблюдать("ПередЗаписью")
|
||||
.Прогон();
|
||||
|
||||
Справочники.Встречи.СохранитьИзменения(ЮТОбщий.ЗначениеВМассиве(Запись));
|
||||
|
||||
Мокито.Проверить(Справочники.Встречи, "Проверка через менеджер")
|
||||
.КоличествоВызовов("ЗаполнитьОбъект").Равно(1)
|
||||
;
|
||||
Мокито.Проверить(Запись.Встреча, "Проверка через ссылку")
|
||||
.КоличествоВызовов("ПередЗаписью").Равно(1)
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецЕсли
|
||||
|
||||
Процедура Прогон_НакоплениеСтатистики(НакоплениеСтатистики) Экспорт
|
||||
|
Loading…
Reference in New Issue
Block a user