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

* Скорректирован подбор реакции, если ни одна не подходит

* Добавлен параметр для возможности дообучения объекта
This commit is contained in:
alkoleft 2023-05-16 02:22:07 +03:00
parent c76adbb0f7
commit 8e7fbf586d
4 changed files with 52 additions and 8 deletions

View File

@ -51,15 +51,17 @@
//
// Параметры:
// Объект - Произвольный - Объект, методы которого хотим подменить.
//
// СброситьСтарыеНастройки - Булево - Необходимо удалить старые настройки по объекту.
// Истина - все предидущие настройки мокирования объекта будут забыты;
// Ложь - будет выполнено дообучение объекта.
// Возвращаемое значение:
// ОбщийМодуль - см. МокитоОбучение
Функция Обучение(Объект) Экспорт
Функция Обучение(Объект, СброситьСтарыеНастройки = Истина) Экспорт
Режимы = МокитоСлужебный.РежимыРаботы();
МокитоСлужебный.УстановитьРежим(Режимы.Обучение);
Возврат МокитоОбучение.Обучение(Объект);
Возврат МокитоОбучение.Обучение(Объект, СброситьСтарыеНастройки);
КонецФункции

View File

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

View File

@ -265,14 +265,17 @@
КонецФункции
Процедура ЗарегистрироватьПерехватОбъекта(Знач Объект) Экспорт
Процедура ЗарегистрироватьПерехватОбъекта(Знач Объект, СброситьСтарыеНастройки = Истина) Экспорт
Если ЭтоОбъект(Объект) Тогда
Объект = Объект.Ссылка;
КонецЕсли;
ПараметрыПерехвата = ПараметрыПерехвата();
ПараметрыПерехвата.Вставить(Объект, ОписаниеПараметровПерехватаОбъекта(Объект));
Если СброситьСтарыеНастройки ИЛИ ПараметрыПерехвата[Объект] = Неопределено Тогда
ПараметрыПерехвата.Вставить(Объект, ОписаниеПараметровПерехватаОбъекта(Объект));
КонецЕсли;
КонецПроцедуры
@ -420,6 +423,11 @@
Для Каждого Реакция Из ПараметрыПерехватаМетода.Реакции Цикл
ПриоритетРеакции = ПроверитьРеакцию(Реакция, ПараметрыВызова);
Если ПриоритетРеакции < 0 Тогда
Продолжить;
КонецЕсли;
ПриоритетыРеакций.Добавить(Новый Структура("Приоритет, Реакция", ПриоритетРеакции, Реакция));
Если ЛучшийПриоритет < ПриоритетРеакции Тогда
@ -428,7 +436,12 @@
КонецЦикла;
Если ЛучшийПриоритет <= 0 Тогда
Возврат Неопределено;
КонецЕсли;
Реакция = Неопределено;
Для Каждого ПриоритетРеакции Из ПриоритетыРеакций Цикл
Если ПриоритетРеакции.Приоритет = ЛучшийПриоритет Тогда
@ -459,7 +472,7 @@
Если НЕ ПроверитьПараметр(ПараметрыМетода[Инд], Реакция.УсловиеРеакции[Инд]) Тогда
Возврат 0;
Возврат -1;
КонецЕсли;

View File

@ -26,6 +26,7 @@
.ДобавитьТест("Проверить")
.ДобавитьТест("Прогон_НакоплениеСтатистики").СПараметрами(Истина).СПараметрами(Ложь)
.ДобавитьСерверныйТест("МокированиеМетодовСсылочныхОбъектов").ВТранзакции()
.ДобавитьТест("ОшибкаПодбораРеакции")
;
КонецПроцедуры
@ -50,6 +51,7 @@
.Равно(2);
Описание = "Обучение через указание имени и набора параметров";
Мокито.Обучение(Интеграция)
.Когда("ВыполнитьЗапрос", Мокито.МассивПараметров(ЛюбойПараметр, ЛюбойПараметр))
.Вернуть(20)
@ -230,6 +232,30 @@
КонецПроцедуры
Процедура ОшибкаПодбораРеакции() Экспорт
Мокито.Обучение(Интеграция)
.Когда("ВыполнитьЗапрос")
.ВыброситьИсключение("Не установлен ответ")
.Когда("ВыполнитьЗапрос", Мокито.МассивПараметров("api/versions"))
.Вернуть(200)
.Когда("ВыполнитьЗапрос", Мокито.МассивПараметров("sessions"))
.Вернуть(200)
.Прогон();
ЮТУтверждения.Что(Интеграция.ВыполнитьЗапрос("api/versions")).Равно(200);
ЮТУтверждения.Что(Интеграция.ВыполнитьЗапрос("sessions")).Равно(200);
Мокито.Обучение(Интеграция, Ложь)
.Когда("ВыполнитьЗапрос", Мокито.МассивПараметров("sessions"))
.Вернуть(403)
.Прогон();
ЮТУтверждения.Что(Интеграция.ВыполнитьЗапрос("api/versions")).Равно(200);
ЮТУтверждения.Что(Интеграция.ВыполнитьЗапрос("sessions")).Равно(403);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции