diff --git a/exts/yaxunit/src/CommonModules/Мокито/Module.bsl b/exts/yaxunit/src/CommonModules/Мокито/Module.bsl index 67235c4c..8443d6c7 100644 --- a/exts/yaxunit/src/CommonModules/Мокито/Module.bsl +++ b/exts/yaxunit/src/CommonModules/Мокито/Module.bsl @@ -87,15 +87,15 @@ // // Параметры: // Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять. -// +// Описание - Строка - Описание проверки, которое будет выведено при возникновении ошибки // Возвращаемое значение: // ОбщийМодуль - см. МокитоПроверки -Функция Проверить(Объект) Экспорт +Функция Проверить(Объект, Описание = Неопределено) Экспорт Режимы = МокитоСлужебный.РежимыРаботы(); МокитоСлужебный.УстановитьРежим(Режимы.Проверка); - Возврат МокитоПроверки.Проверить(Объект); + Возврат МокитоПроверки.Проверить(Объект, Описание); КонецФункции diff --git a/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl index 87b5f502..27939c03 100644 --- a/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl +++ b/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl @@ -19,9 +19,9 @@ #Область ПрограммныйИнтерфейс // см. Мокито.Проверить -Функция Проверить(Объект) Экспорт +Функция Проверить(Объект, Описание) Экспорт - УстановитьПараметрыПроверки(Объект); + УстановитьПараметрыПроверки(Объект, Описание); Возврат МокитоПроверки; КонецФункции @@ -70,11 +70,13 @@ // ОбщийМодуль - Этот же модуль, для замыкания Функция Равно(Количество, Знач Описание = Неопределено) Экспорт + Настройки = ПараметрыПроверки(); + Статистика = СтатистикаВызовов(); ЮТУтверждения - .Что(Статистика, Описание) + .Что(Статистика, Настройки.Описание) .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта()) - .ИмеетДлину(Количество); + .ИмеетДлину(Количество, Описание); Возврат МокитоПроверки; @@ -168,17 +170,17 @@ // Структура: // * ПроверяемыйОбъект - Произвольный // * СтруктураВызоваМетода - см. МокитоСлужебный.СтруктураВызоваМетода +// * Описание - Строка Функция ПараметрыПроверки() - Параметры = МокитоСлужебный.Настройки().ПараметрыПроверки; - Возврат Параметры; + Возврат МокитоСлужебный.Настройки().ПараметрыПроверки; КонецФункции -Процедура УстановитьПараметрыПроверки(Объект = Неопределено, СтруктураВызоваМетода = Неопределено) +Процедура УстановитьПараметрыПроверки(Объект, Описание) - ПараметрыОбучения = Новый Структура("ПроверяемыйОбъект, СтруктураВызоваМетода", Объект, СтруктураВызоваМетода); - МокитоСлужебный.Настройки().ПараметрыПроверки = ПараметрыОбучения; + ПараметрыПроверки = Новый Структура("ПроверяемыйОбъект, Описание, СтруктураВызоваМетода", Объект, Описание); + МокитоСлужебный.Настройки().ПараметрыПроверки = ПараметрыПроверки; КонецПроцедуры diff --git a/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl index 4d2adc6a..47d85913 100644 --- a/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl +++ b/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl @@ -298,17 +298,18 @@ Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт - Если ЭтоОбъект(Объект) Тогда - Объект = Объект.Ссылка; + Вызовы = Настройки().Статистика.Вызовы; + + СтатистикаВызововМетода = Новый Массив(); + Статистика = Вызовы[Объект]; + + Если Статистика <> Неопределено И Статистика.Свойство(ИмяМетода) Тогда + СтатистикаВызововМетода = Статистика[ИмяМетода]; + ИначеЕсли Статистика = Неопределено И ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗнч(Объект)) Тогда + СтатистикаВызововМетода = СтатистикаВызововПоСсылке(Вызовы, Объект, ИмяМетода); КонецЕсли; - Статистика = Настройки().Статистика.Вызовы[Объект]; - - Если Статистика = Неопределено ИЛИ НЕ Статистика.Свойство(ИмяМетода) Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат Статистика[ИмяМетода]; + Возврат СтатистикаВызововМетода; КонецФункции @@ -343,35 +344,6 @@ #Область ОбработкаВызовов -// Зарегистрировать вызов метода. -// -// Параметры: -// Настройки - см. ИнициализироватьНастройки -// ПараметрыПерехвата - см. ДанныеПерехвата -// СтруктураВызоваМетода - см. СтруктураВызоваМетода -Процедура ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода) - - Объект = ПараметрыПерехвата.Объект; - ИмяМетода = СтруктураВызоваМетода.ИмяМетода; - Статистика = Настройки.Статистика.Вызовы[Объект]; - - Если Статистика = Неопределено Тогда - - Статистика = Новый Структура; - Настройки.Статистика.Вызовы.Вставить(Объект, Статистика); - - КонецЕсли; - - Если НЕ Статистика.Свойство(ИмяМетода) Тогда - - Статистика.Вставить(ИмяМетода, Новый Массив); - - КонецЕсли; - - Статистика[ИмяМетода].Добавить(СтруктураВызоваМетода); - -КонецПроцедуры - Функция ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение) Если НЕ ПараметрыПерехвата.Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда @@ -539,7 +511,7 @@ #КонецОбласти -Функция ЭтоСсылка(Значение) Экспорт +Функция ЭтоСсылка(Значение) Если Значение <> Неопределено Тогда @@ -556,7 +528,7 @@ КонецФункции -Функция ЭтоОбъект(Значение) Экспорт +Функция ЭтоОбъект(Значение) Если Значение <> Неопределено И ЮТОбщий.ПеременнаяСодержитСвойство(Значение, "Ссылка") Тогда @@ -608,4 +580,54 @@ КонецФункции +#Область Статистика + +// Зарегистрировать вызов метода. +// +// Параметры: +// Настройки - см. ИнициализироватьНастройки +// ПараметрыПерехвата - см. ДанныеПерехвата +// СтруктураВызоваМетода - см. СтруктураВызоваМетода +Процедура ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода) + + Объект = СтруктураВызоваМетода.Объект; + ИмяМетода = СтруктураВызоваМетода.ИмяМетода; + Статистика = Настройки.Статистика.Вызовы[Объект]; + + Если Статистика = Неопределено Тогда + + Статистика = Новый Структура; + Настройки.Статистика.Вызовы.Вставить(Объект, Статистика); + + КонецЕсли; + + Если НЕ Статистика.Свойство(ИмяМетода) Тогда + + Статистика.Вставить(ИмяМетода, Новый Массив); + + КонецЕсли; + + Статистика[ИмяМетода].Добавить(СтруктураВызоваМетода); + +КонецПроцедуры + +Функция СтатистикаВызововПоСсылке(Вызовы, Ссылка, ИмяМетода) + + СтатистикаВызововМетода = Новый Массив(); + + Для Каждого Элемент Из Вызовы Цикл + ПодходящийЭлемент = ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗнч(Элемент.Ключ)) + И Элемент.Ключ.Ссылка = Ссылка + И Элемент.Значение.Свойство(ИмяМетода); + Если ПодходящийЭлемент Тогда + ЮТОбщий.ДополнитьМассив(СтатистикаВызововМетода, Элемент.Значение[ИмяМетода]); + КонецЕсли; + КонецЦикла; + + Возврат СтатистикаВызововМетода; + +КонецФункции + +#КонецОбласти + #КонецОбласти diff --git a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl index 91260e97..ebdf0fbe 100644 --- a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl @@ -361,12 +361,15 @@ // Функция СкопироватьМассив(МассивИсточник) Экспорт - МассивРезультат = Новый Массив; + Если НЕ ЗначениеЗаполнено(МассивИсточник) Тогда + Возврат Новый Массив; + КонецЕсли; - Для Каждого Элемент Из МассивИсточник Цикл - - МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент)); - + Размер = МассивИсточник.Количество(); + МассивРезультат = Новый Массив(Размер); + + Для Инд = 0 По Размер - 1 Цикл + МассивРезультат[Инд] = СкопироватьРекурсивно(МассивИсточник[Инд]); КонецЦикла; Возврат МассивРезультат; diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl index cab603e7..0c5b8ec8 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl @@ -328,9 +328,8 @@ Функция КлючЗаписи(Объект) ТипЗначения = ТипЗнч(Объект); - ПредставлениеТипа = ЮТОбщий.ПредставлениеТипа(ТипЗначения); - Если СтрНайти(ПредставлениеТипа, "Object.") Тогда + Если ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда Возврат Объект.Ссылка; diff --git a/exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl index 89bbbaeb..897e400f 100644 --- a/exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТТипыДанныхСлужебный/Module.bsl @@ -102,6 +102,14 @@ КонецФункции +Функция ЭтоТипОбъекта(ТипЗначения) Экспорт + + ПредставлениеТипа = ЮТОбщий.ПредставлениеТипа(ТипЗначения); + + Возврат СтрНайти(ПредставлениеТипа, "Object."); + +КонецФункции + #Область СистемныеПеречисления Функция ЭтоСистемноеПеречисление(Тип) Экспорт diff --git a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl index 7448ea77..030e872b 100644 --- a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl @@ -1828,13 +1828,13 @@ #Область Предикаты Процедура ПроверитьПредикат(Выражение, ОжидаемоеЗначение, ОписаниеПроверки, ПараметрыСравнения = Неопределено) - + Контекст = Контекст(); Предикат = ЮТФабрика.ВыражениеПредиката(Выражение, Контекст.ОбъектПроверки.ИмяСвойства, ОжидаемоеЗначение); ПолноеОписаниеПроверки = ЮТОбщий.ДобавитьСтроку(Контекст.ПрефиксОшибки, ОписаниеПроверки, " "); - ПараметрыСообщенийОбОшибке = ЮТПредикатыКлиентСервер.ПараметрыСообщенийОбОшибке(ПолноеОписаниеПроверки); + ПараметрыСообщенийОбОшибке = ЮТПредикатыКлиентСервер.ПараметрыСообщенийОбОшибке(ПолноеОписаниеПроверки, , Контекст.ОбъектПроверки.Представление); Результат = ЮТПредикатыКлиентСервер.ПроверитьПредикаты(Контекст.ОбъектПроверки.Значение, Предикат, ПараметрыСообщенийОбОшибке, ПараметрыСравнения); ОбработатьРезультатПроверкиПредиката(Результат); diff --git a/fixtures/demo-configuration/src/Catalogs/Встречи/ManagerModule.bsl b/fixtures/demo-configuration/src/Catalogs/Встречи/ManagerModule.bsl index 0ca240b2..333e9633 100644 --- a/fixtures/demo-configuration/src/Catalogs/Встречи/ManagerModule.bsl +++ b/fixtures/demo-configuration/src/Catalogs/Встречи/ManagerModule.bsl @@ -13,17 +13,7 @@ Продолжить; КонецЕсли; - ВстречаОбъект.Начало = ОбрабатываемыйЭлемент.Начало; - ВстречаОбъект.Окончание = ОбрабатываемыйЭлемент.Конец; - - Пользователь = ОбрабатываемыйЭлемент.Владелец; - Если Пользователь = Неопределено Тогда - Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - КонецЕсли; - - Владелец = Справочники.Пользователи.НайтиПоКоду(Пользователь); - ВстречаОбъект.Владелец = Владелец; - + ЗаполнитьОбъект(ВстречаОбъект, ОбрабатываемыйЭлемент); ВстречаОбъект.Записать(); КонецЦикла; @@ -41,3 +31,18 @@ Возврат Успешно; КонецФункции + +Процедура ЗаполнитьОбъект(Объект, ОбрабатываемыйЭлемент) + + Объект.Начало = ОбрабатываемыйЭлемент.Начало; + Объект.Окончание = ОбрабатываемыйЭлемент.Конец; + + Пользователь = ОбрабатываемыйЭлемент.Владелец; + Если Пользователь = Неопределено Тогда + Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + КонецЕсли; + + Владелец = Справочники.Пользователи.НайтиПоКоду(Пользователь.Имя); + Объект.Владелец = Владелец; + +КонецПроцедуры diff --git a/tests/src/Catalogs/Встречи/ManagerModule.bsl b/tests/src/Catalogs/Встречи/ManagerModule.bsl index a588ac46..4643d85f 100644 --- a/tests/src/Catalogs/Встречи/ManagerModule.bsl +++ b/tests/src/Catalogs/Встречи/ManagerModule.bsl @@ -31,3 +31,17 @@ КонецЕсли; КонецФункции + +&Вместо("ЗаполнитьОбъект") +Процедура Расш1_ЗаполнитьОбъект(Объект, ОбрабатываемыйЭлемент) Экспорт + + ПараметрыМетода = Мокито.МассивПараметров(Объект, ОбрабатываемыйЭлемент); + + ПрерватьВыполнение = Ложь; + Мокито.АнализВызова(Справочники.Встречи, "ЗаполнитьОбъект", ПараметрыМетода, ПрерватьВыполнение); + + Если НЕ ПрерватьВыполнение Тогда + ПродолжитьВызов(Объект, ОбрабатываемыйЭлемент); + КонецЕсли; + +КонецПроцедуры diff --git a/tests/src/Catalogs/Встречи/ObjectModule.bsl b/tests/src/Catalogs/Встречи/ObjectModule.bsl index a9d71463..f56f56e7 100644 --- a/tests/src/Catalogs/Встречи/ObjectModule.bsl +++ b/tests/src/Catalogs/Встречи/ObjectModule.bsl @@ -31,3 +31,17 @@ КонецЕсли; КонецФункции + +&Вместо("ПередЗаписью") +Процедура Расш1_ПередЗаписью(Отказ) + + ПараметрыМетода = Мокито.МассивПараметров(Отказ); + + ПрерватьВыполнение = Ложь; + Мокито.АнализВызова(ЭтотОбъект, "ПередЗаписью", ПараметрыМетода, ПрерватьВыполнение); + + Если НЕ ПрерватьВыполнение Тогда + ПродолжитьВызов(Отказ); + КонецЕсли; + +КонецПроцедуры diff --git a/tests/src/CommonModules/ОМ_Мокито/Module.bsl b/tests/src/CommonModules/ОМ_Мокито/Module.bsl index 5cec2fe3..078a2a37 100644 --- a/tests/src/CommonModules/ОМ_Мокито/Module.bsl +++ b/tests/src/CommonModules/ОМ_Мокито/Module.bsl @@ -28,6 +28,7 @@ .ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов").ВТранзакции() .ДобавитьТест("ОшибкаПодбораРеакции") .ДобавитьТест("ИспользованиеПредикатов") + .ДобавитьСерверныйТест("МокированиеЧерезМенеджер") ; КонецПроцедуры @@ -197,6 +198,32 @@ .Равно(Результат); КонецПроцедуры + +Процедура МокированиеЧерезМенеджер() Экспорт + + ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи(); + ПараметрыЗаписи.ОбменДаннымиЗагрузка = Истина; + + Запись = Новый Структура("Встреча, Начало, Конец, Владелец"); + Запись.Встреча = ЮТест.Данные().СоздатьЭлемент(Справочники.Встречи, , , ПараметрыЗаписи); + + Мокито.Обучение(Справочники.Встречи) + .Наблюдать("СохранитьИзменения") + .Наблюдать("ЗаполнитьОбъект") + .Наблюдать("ПередЗаписью") + .Прогон(); + + Справочники.Встречи.СохранитьИзменения(ЮТОбщий.ЗначениеВМассиве(Запись)); + + Мокито.Проверить(Справочники.Встречи, "Проверка через менеджер") + .КоличествоВызовов("ЗаполнитьОбъект").Равно(1) + ; + Мокито.Проверить(Запись.Встреча, "Проверка через ссылку") + .КоличествоВызовов("ПередЗаписью").Равно(1) + ; + +КонецПроцедуры + #КонецЕсли Процедура Прогон_НакоплениеСтатистики(НакоплениеСтатистики) Экспорт