diff --git a/exts/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl index 3b707098..8bbd95e7 100644 --- a/exts/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl +++ b/exts/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl @@ -202,45 +202,8 @@ Функция СоздатьОписаниеУсловнойРеакции(СтруктураВызоваМетода) - Возврат Новый Структура("УсловиеРеакции, Действие", УсловиеРеакции(СтруктураВызоваМетода), Неопределено); - -КонецФункции - -Функция УсловиеРеакции(СтруктураВызоваМетода) - - Параметры = СтруктураВызоваМетода.Параметры; - - Если Параметры = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Условия = Новый Массив; - - ТипыУсловий = МокитоСлужебный.ТипыУсловийПараметров(); - - Для Каждого Параметр Из Параметры Цикл - - Если МокитоСлужебный.ЭтоМаскаПарамера(Параметр) Тогда - - Условия.Добавить(Параметр); - - ИначеЕсли ЮТПредикатыКлиентСервер.ЭтоПредикат(Параметр) Тогда - - Маска = МокитоСлужебный.ОписаниеМаскиПараметра(ТипыУсловий.Предикат, 90); - Маска.Вставить("Предикат", ЮТПредикатыКлиентСервер.НаборПредикатов(Параметр)); - Условия.Добавить(Маска); - - Иначе - - Маска = МокитоСлужебный.ОписаниеМаскиПараметра(ТипыУсловий.Значение, 100); - Маска.Вставить("Значение", Параметр); - Условия.Добавить(Маска); - - КонецЕсли; - - КонецЦикла; - - Возврат Условия; + Условия = МокитоСлужебный.УсловиеИзПараметров(СтруктураВызоваМетода.Параметры); + Возврат Новый Структура("УсловиеРеакции, Действие", Условия, Неопределено); КонецФункции diff --git a/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl index 2ce00f5e..c3c5c6bb 100644 --- a/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl +++ b/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl @@ -213,11 +213,7 @@ Параметр = ВызовМетода.Параметры[Инд]; Условие = СтруктураВызоваМетода.Параметры[Инд]; - Если МокитоСлужебный.ЭтоМаскаПарамера(Условие) Тогда - Успешно = МокитоСлужебный.ПроверитьПараметр(Параметр, Условие); - Иначе - Успешно = ЮТСравнениеКлиентСервер.ЗначенияРавны(Параметр, Условие); - КонецЕсли; + Успешно = МокитоСлужебный.ПроверитьПараметр(Параметр, Условие); Если НЕ Успешно Тогда Прервать; @@ -258,7 +254,8 @@ Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда СтруктураВызоваМетода = ИмяМетода; Иначе - СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова); + Условия = МокитоСлужебный.УсловиеИзПараметров(ПараметрыВызова); + СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, Условия); КонецЕсли; Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда diff --git a/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl index 86ed07b4..4d2adc6a 100644 --- a/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl +++ b/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl @@ -572,4 +572,40 @@ КонецФункции +Функция УсловиеИзПараметров(Параметры) Экспорт + + Если Параметры = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Условия = Новый Массив; + + ТипыУсловий = ТипыУсловийПараметров(); + + Для Каждого Параметр Из Параметры Цикл + + Если ЭтоМаскаПарамера(Параметр) Тогда + + Условия.Добавить(Параметр); + + ИначеЕсли ЮТПредикатыКлиентСервер.ЭтоПредикат(Параметр) Тогда + + Маска = ОписаниеМаскиПараметра(ТипыУсловий.Предикат, 90); + Маска.Вставить("Предикат", ЮТПредикатыКлиентСервер.НаборПредикатов(Параметр)); + Условия.Добавить(Маска); + + Иначе + + Маска = ОписаниеМаскиПараметра(ТипыУсловий.Значение, 100); + Маска.Вставить("Значение", Параметр); + Условия.Добавить(Маска); + + КонецЕсли; + + КонецЦикла; + + Возврат Условия; + +КонецФункции + #КонецОбласти diff --git a/tests/src/CommonModules/ОМ_Мокито/Module.bsl b/tests/src/CommonModules/ОМ_Мокито/Module.bsl index bc50ba7d..5cec2fe3 100644 --- a/tests/src/CommonModules/ОМ_Мокито/Module.bsl +++ b/tests/src/CommonModules/ОМ_Мокито/Module.bsl @@ -259,8 +259,48 @@ Процедура ИспользованиеПредикатов() Экспорт - ВызватьИсключение "Не реализовано"; + ЛюбойПараметр = Мокито.ЛюбойПараметр(); + УсловиеСтруктура = ЮТест.Предикат() + .ИмеетТип("Структура") + .Реквизит("Флаг").Равно(1) + .Получить(); + Адрес = "service.ru"; + Мокито.Обучение(Интеграция) + .Когда("ВыполнитьЗапрос") + .ВыброситьИсключение("Не отработал перехват") + .Когда("ВыполнитьЗапрос", Мокито.МассивПараметров(ЛюбойПараметр, УсловиеСтруктура)) + .Вернуть(1) + .Когда("ВыполнитьЗапрос", Мокито.МассивПараметров(ЛюбойПараметр, ЮТест.Предикат().Реквизит("Флаг").Равно(2))) + .Вернуть(2) + .Когда("ВыполнитьЗапрос", Мокито.МассивПараметров(ЛюбойПараметр, ЮТест.Предикат().ИмеетТип("Массив").Реквизит(0).Равно(3))) + .Вернуть(3) + .Когда("ВыполнитьЗапрос", Мокито.МассивПараметров(ЛюбойПараметр, ЮТест.Предикат().Равно(4))) + .Вернуть(4) + .Когда("ВыполнитьЗапрос", Мокито.МассивПараметров(ЮТест.Предикат().Содержит("com"), ЮТест.Предикат().Равно(4))) + .Вернуть(5) + .Когда("ВыполнитьЗапрос", Мокито.МассивПараметров(ЮТест.Предикат().Содержит("org").Получить(), ЮТест.Предикат().Равно(4))) + .Вернуть(6) + .Прогон() + ; + + ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес, Новый Структура("Флаг", 1))) + .Равно(1); + ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес, 4)) + .Равно(4); + ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос("service.com", 4)) + .Равно(4); // Не вернет 5, потому что если несколько предиктов в условиях параметров, нужно использовать Получить + ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос("service.org", 4)) + .Равно(6); // + ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес, ЮТОбщий.ЗначениеВМассиве(3))) + .Равно(3); + ЮТест.ОжидаетЧто(Интеграция.ВыполнитьЗапрос(Адрес, Новый Структура("Флаг", 2))) + .Равно(2); + + Мокито.Проверить(Интеграция) + .КоличествоВызовов("ВыполнитьЗапрос").Равно(6) + .КоличествоВызовов("ВыполнитьЗапрос", Мокито.МассивПараметров(ЮТест.Предикат().Содержит("ru"))).Равно(4) + .КоличествоВызовов("ВыполнитьЗапрос", Мокито.МассивПараметров(ЛюбойПараметр, Новый Структура("Флаг", 2))).Равно(1) КонецПроцедуры #КонецОбласти