diff --git a/docs/mockito.md b/docs/mockito.md
new file mode 100644
index 00000000..7e124ad8
--- /dev/null
+++ b/docs/mockito.md
@@ -0,0 +1,258 @@
+# Мокито
+
+Мокито - модуль созданный по образу популярного java-фреймворка для тестирования [Mockito](https://site.mockito.org/). Расширяет возможности тестирования, позволяет легко менять логику работы системы подменяя результаты работы методов, отключая какие-либо алгоритмы и проверки.
+
+Юнит-тесты, это тесты конкретных методов в отрыве от системы - контролировать данные используемые методом, изменение логики и ошибки других объектов не должны аффектить на тест.
+В реальных конфигурациях объекты тесно связаны друг с другом, поэтому добиться контроля влияющих данных очень сложно. Обычно приходится создавать большой объем тестовых данных. А добиться изоляции от изменения логики других объектов почти невозможно. Мокирование же позволяет изменить логику работы системы таким образом, чтобы тестируемый метод не вызывал другие методы и использовал уже подготовленные данные. Например, для тестирования проведения реализации товаров мы можем подменить результат функции формирующей таблицу проводок и избежать сложной подготовки данных.
+
+С помощью Мокито разработчик указывает, что делать при вызове определенных методов - вернуть нужный результат, вызвать исключение или просто не трогать ненужные методы. После тестирования разработчик может запросить и проверить статистику о вызовах, как и какие методы были вызваны.
+
+Пример:
+
+```bsl
+ОтветСерверы = ОтветУспешногоЗапроса("Серверы");
+ОтветДиски = ОтветУспешногоЗапроса("Диски");
+
+Мокито.Обучение(РаботаСHTTP)
+ .Когда(РаботаСHTTP.ВыполнитьЗапрос(ПараметрыПодключения, "/hosts", "GET"))
+ .Вернуть(ОтветСерверы)
+ .Когда(РаботаСHTTP.ВыполнитьЗапрос(ПараметрыПодключения, "/disks", "GET"))
+ .Вернуть(ОтветДиски)
+ .Прогон();
+
+Результат = БиллингДрайверГипервизорNutanix.Серверы(ПараметрыПодключения);
+```
+
+В этом примере изменяется работа модуля `РаботаСHTTP`, для функции `ВыполнитьЗапрос`, вызванной с нужными параметрами будет возвращено подготовленное значение, а сам метод не будет вызван.
+Мы получим ожидаемые ответы на запросы к сторонней системе и уйдет от проблем связанных с ней - недоступность, изменение контрактов и т.д.
+
+Работа с Мокито делится на 3 стадии:
+
+1. Обучение - настраиваем поведение методов системы
+2. Прогон - выполнение теста целевого метода
+3. Проверка - анализ вызовов
+
+## Использование
+
+### Настройка мокируемых методов
+
+Для работы Мокито вам необходимо добавить интересующие методы в тестовое расширение.
+
+Эта позволит управлять поведением метода:
+
+* подменять результат во время выполнения теста
+* использовать явный вызов метода с параметрами на стадии обучения, например `Мокито.Обучение(Справочники.ИсточникиДанных).Когда(Справочники.ИсточникиДанных.СохраненныеБезопасныеДанные(Справочник)).Вернуть(Результат)`
+* использовать явный вызов метода с параметрами на стадии проверки, например `Мокито.Проверить(Справочники.ИсточникиДанных).КоличествоВызовов(Справочники.ИсточникиДанных.СохраненныеБезопасныеДанные(Справочник)).Больше(1)`
+
+Примеры добавления методов в расширение:
+
+#### Метод общего модуля
+
+Добавляем обработку метода `ИнициализироватьВнешнююКомпоненту` общего модуля `ОбщегоНазначенияКлиентСервер`
+
+```bsl
+&Вместо("ИнициализироватьВнешнююКомпоненту")
+Функция ЮТИнициализироватьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ВызыватьИсключение, ПаузаЧерезКомпоненту) Экспорт
+ // Собираем параметры в массив
+ ПараметрыМетода = Мокито.МассивПараметров(ИмяМакета, ИмяКомпоненты, ВызыватьИсключение, ПаузаЧерезКомпоненту);
+
+ // Отправляем данные на анализ
+ ПрерватьВыполнение = Ложь;
+ Результат = Мокито.АнализВызова(ОбщегоНазначенияКлиентСервер, "ИнициализироватьВнешнююКомпоненту", ПараметрыМетода, ПрерватьВыполнение);
+
+ // Обрабатываем результат анализа
+ Если НЕ ПрерватьВыполнение Тогда
+ Возврат ПродолжитьВызов(ИмяМакета, ИмяКомпоненты, ВызыватьИсключение, ПаузаЧерезКомпоненту);
+ Иначе
+ Возврат Результат;
+ КонецЕсли;
+КонецФункции
+```
+
+#### Метод модуля менеджера
+
+Добавляем обработку метода `СохраненныеБезопасныеДанные` модуля менеджера справочника `Справочники.ИсточникиДанных`
+
+```bsl
+&Вместо("СохраненныеБезопасныеДанные")
+Функция ЮТСохраненныеБезопасныеДанные(Владелец, Знач Ключи) Экспорт
+
+ // Собираем параметры в массив
+ ПараметрыМетода = Мокито.МассивПараметров(Владелец, Ключи);
+
+ // Отправляем данные на анализ
+ ПрерватьВыполнение = Ложь;
+ Результат = Мокито.АнализВызова(Справочники.ИсточникиДанных, "СохраненныеБезопасныеДанные", ПараметрыМетода, ПрерватьВыполнение);
+
+ // Обрабатываем результат анализа
+ Если НЕ ПрерватьВыполнение Тогда
+ Возврат ПродолжитьВызов(Владелец, Ключи);
+ Иначе
+ Возврат Результат;
+ КонецЕсли;
+
+КонецФункции
+```
+
+#### Метод модуля объекта
+
+Добавляем обработку приватного метода `ПеренестиДанныеВБезопасноеХранилище` модуля объекта справочника `Справочники.ИсточникиДанных`
+
+```bsl
+&Вместо("ПеренестиДанныеВБезопасноеХранилище")
+Функция ЮТПеренестиДанныеВБезопасноеХранилище(Ключи)
+
+ // Собираем параметры в массив
+ ПараметрыМетода = Мокито.МассивПараметров(Ключи);
+
+ // Отправляем данные на анализ
+ ПрерватьВыполнение = Ложь;
+ Результат = Мокито.АнализВызова(ЭтотОбъект, "ПеренестиДанныеВБезопасноеХранилище", ПараметрыМетода, ПрерватьВыполнение);
+
+ // Обрабатываем результат анализа
+ Если НЕ ПрерватьВыполнение Тогда
+ Возврат ПродолжитьВызов(Ключи);
+ Иначе
+ Возврат Результат;
+ КонецЕсли;
+
+КонецФункции
+```
+
+### Обучение
+
+Самая первая стадия при написании тестов использующих моки - обучение.
+Мы создаем правила как будет вести себя метод при различных вариантах вызова.
+Правило состоит из условий проверки параметров и действия выполняемого при соблюдении условий.
+
+Условия можно задать на равенство определенному значению, на проверку типа переданного значения или же безусловно принимать любый параметры
+
+
+Существует 2 основных подхода к формированию условий вызова:
+
+1. Явный вызов метода с параметрами: `Обучение(РаботаСHTTP).Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(ИсточникДанных, Данные)).Вернуть(2)`
+2. Указание имени метода и набора параметров: `Обучение(РаботаСHTTP).Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(ИсточникДанных, Данные)).Вернуть(2)`
+
+Первый вариант имеет ряд недостатков:
+
+1. Работает только для экспортных методов
+2. Необходимо передавать все обязательные параметры или использовать для них маску `Мокито.ЛюбойПараметр()`
+3. Если не указывать необязательные параметры, то их значения по умолчанию попадут в настройку. Покажу на примере.
+ Имеется метод `Функция Метод(Параметр1, Параметр2, Параметр3 = 3)`
+
+ Настройка `Когда(Метод(1, 2)).Вернуть(0)`, в результате ноль мы получим для вызовов
+
+ * `Метод(1, 2)`
+ * `Метод(1, 2, 3)`
+
+ Для вызова `Метод(1, 2, 4)` будет выполнен основной алгоритм метода.
+
+ А для настройки `Когда("Метод", Мокито.МассивПараметров(1, 2)).Вернуть(0)` все три варианта вызова вернут ноль.
+
+После того как определились с условием вызова указанным в методе `Когда` нужно указать реакцию. Возможные реакции:
+
+* `Вернуть` - вернуть указанное значение
+* `ВыброситьИсключение` - вызвать исключение с переданным текстом
+* `Пропустить` - пропустить выполнение метод (актуально для процедур)
+
+#### Примеры формирования различных вариантов условий
+
+Имеется метод:
+
+```bsl
+Функция ОтправитьОбъектНаСервер(ИсточникДанных, Объект, HTTPМетод = "POST",
+ ТипКонтента = "json", Преобразование = Неопределено,
+ ДопНастройки = Неопределено, Ответ = Неопределено, ОтветВСтруктуру = Ложь,
+ ТелоОтветаВХранилище = Ложь) Экспорт
+```
+
+* Переопределить все вызовы метода - указываем имя метода без указания параметров
+ `Мокито.Обучение(РаботаСHTTP).Когда("ОтправитьОбъектНаСервер").Вернуть(1)`
+* Переопределить вызов, когда первый параметр имеет определенное значение
+ 1. `Мокито.Обучение(РаботаСHTTP).Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(ИсточникДанных)).Вернуть(2)`
+ 2. `Мокито.Обучение(РаботаСHTTP).Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(ИсточникДанных, Мокито.ЛюбойПараметр()).Вернуть(2)`. Тут используется маска `Мокито.ЛюбойПараметр()`, тк второй параметр является обязательным
+* Переопределить вызов, когда **второй** параметр имеет определенное значение
+ 1. `Мокито.Обучение(РаботаСHTTP).Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(Мокито.ЛюбойПараметр(), Объект)).Вернуть(2)`
+ 2. `Мокито.Обучение(РаботаСHTTP).Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(Мокито.ЛюбойПараметр(), Объект).Вернуть(2)`.
+* Условие на тип параметра
+ 1. `Мокито.Обучение(РаботаСHTTP).Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(Мокито.ТипизированныйПараметр(ТипИсточникДанных), Мокито.ЧисловойПараметр())).Вернуть(3)`
+ 2. `Мокито.Обучение(РаботаСHTTP).Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(Мокито.ТипизированныйПараметр(ТипИсточникДанных), Мокито.ЧисловойПараметр()).Вернуть(3)`
+
+## Прогон
+
+После обучения, настройки реакций на вызовы методов, можно запускать тест нужного метода. Для перехода к этому режиму работы Мокито используется метод `Прогон`.
+
+Все вызовы к настроенным методам (добавленным в расширение) будут перехватываться и анализироваться на совпадение условий вызова.
+Для вызовов, у которых есть подходящая "реакция" будет переопределено выполнение и запустится соответствующая реакция (вернуть значение, вызвать исключение и тд), для прочих - выполнение продолжится.
+
+```bsl
+// Настройка
+Мокито.Обучение(РаботаСHTTP)
+ .Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(Мокито.ЛюбойПараметр(), Мокито.ЛюбойПараметр()))
+ .Вернуть(РезультатПоУмолчанию)
+ .Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(Справочники.ИсточникиДанных.FTP, 2))
+ .Вернуть(2)
+ .Прогон(); // Перевод в режим прогона теста
+
+Результат = РаботаСHTTP.ОтправитьОбъектНаСервер(ИсточникДанных, Данные); // Результат будет равен переменной РезультатПоУмолчанию
+Результат = РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 2); // Результат будет равен 2
+```
+
+## Проверка
+
+После прогона теста можно проверить какие методы, с какими параметрами вызывались. Для этих целей необходимо воспользоваться методом `Проверить`
+
+```bsl
+Мокито.Проверить(РаботаСHTTP) // Устанавливаем проверяемый объект
+ .КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(ЛюбойПараметр, Мокито.ЧисловойПараметр())) // Условия поиска вызовов
+ .Больше(1) // Проверки
+ .Равно(2)
+ .КоличествоВызовов("ОтправитьОбъектНаСервер").Заполнено().Равно(3).Меньше(6)
+ .КоличествоВызовов("ОтправитьЗапросHTTP").Пусто().Меньше(1)
+ .КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(1, 2)).Равно(1)
+ .КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(ЛюбойПараметр, ЛюбойПараметр)).Равно(3)
+ .КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(Мокито.ТипизированныйПараметр(ТипИсточникДанных), ЛюбойПараметр)).Равно(1)
+```
+
+Принцип формирования проверки:
+
+* Указываем проверяемый объект `Проверить(РаботаСHTTP)`.
+* Указываем условия поиска вызовов метода. Логика формирования условия такая же как при обучении.
+ Например, `КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(ЛюбойПараметр, Мокито.ЧисловойПараметр()))`
+ Соберет все вызовы метода `РаботаСHTTP.ОтправитьОбъектНаСервер`, к которых вторым параметром идет число, а 3й и последующий параметры имеют значения по умолчанию.
+* Проверяем собранные вызовы:
+ * `Заполнено` - есть вызовы метода по указанным условиям
+ * `Пусто` - нет вызовов метода по указанным условиям
+ * `Равно` - количество вызовов попавших под условия равно указанному значению
+ * `Больше` - количество вызовов попавших под условия больше указанного значения
+ * `Меньше` - количество вызовов попавших под условия меньше указанного значения
+
+## Кейсы использования\*
+
+\* *В примерах опускается часть добавления метода в расширение*
+
+1. Подмена результат функции для любого вызова
+
+ ```bsl
+ Мокито.Обучение(РаботаСHTTP)
+ .Когда("ОтправитьОбъектНаСервер")
+ .Вернуть(1)
+ ```
+
+2. Выключение алгоритма проведения документа
+
+ ```bsl
+ Мокито.Обучение(СсылкаИлиОбъектДокумент)
+ .Когда("ОбработкаПроведения")
+ .Пропустить()
+ ```
+
+3. Выбросить исключение, если в метод передан некорректный набор параметров
+
+ ```bsl
+ Мокито.Обучение(РаботаСHTTP)
+ .Когда("ОтправитьОбъектНаСервер")
+ .ВыброситьИсключение("Не верные параметры вызова")
+ .Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, Мокито.ЛюбойПараметр()))
+ .ВыполнитьМетод();
+ ```
diff --git a/exts/yaxunit/DT-INF/PROJECT.PMF b/exts/yaxunit/DT-INF/PROJECT.PMF
index 3b39ff43..16b36590 100644
--- a/exts/yaxunit/DT-INF/PROJECT.PMF
+++ b/exts/yaxunit/DT-INF/PROJECT.PMF
@@ -1,3 +1,3 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.10
-Base-Project: configuration
+Base-Project: BSP
diff --git a/exts/yaxunit/src/Catalogs/ДополнительныеПараметрыЖурналаДействийПользователя/ObjectModule.bsl b/exts/yaxunit/src/Catalogs/ДополнительныеПараметрыЖурналаДействийПользователя/ObjectModule.bsl
new file mode 100644
index 00000000..5bff8e14
--- /dev/null
+++ b/exts/yaxunit/src/Catalogs/ДополнительныеПараметрыЖурналаДействийПользователя/ObjectModule.bsl
@@ -0,0 +1,33 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+&Вместо("ПолучитьСтруктуруИзХранилища")
+Функция ЮТПолучитьСтруктуруИзХранилища() Экспорт
+
+ ПараметрыМетода = Новый Массив();;
+
+ ПрерватьВыполнение = Ложь;
+ Результат = Мокито.АнализВызова(ЭтотОбъект, "ПолучитьСтруктуруИзХранилища", ПараметрыМетода, ПрерватьВыполнение);
+
+ Если НЕ ПрерватьВыполнение Тогда
+ Возврат ПродолжитьВызов();
+ Иначе
+ Возврат Результат;
+ КонецЕсли;
+
+КонецФункции
diff --git a/exts/yaxunit/src/Catalogs/ДополнительныеПараметрыЖурналаДействийПользователя/ДополнительныеПараметрыЖурналаДействийПользователя.mdo b/exts/yaxunit/src/Catalogs/ДополнительныеПараметрыЖурналаДействийПользователя/ДополнительныеПараметрыЖурналаДействийПользователя.mdo
new file mode 100644
index 00000000..e6e826be
--- /dev/null
+++ b/exts/yaxunit/src/Catalogs/ДополнительныеПараметрыЖурналаДействийПользователя/ДополнительныеПараметрыЖурналаДействийПользователя.mdo
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+ ДополнительныеПараметрыЖурналаДействийПользователя
+ Adopted
+
+ Extended
+
+
diff --git a/exts/yaxunit/src/Catalogs/ИсточникиДанных/ManagerModule.bsl b/exts/yaxunit/src/Catalogs/ИсточникиДанных/ManagerModule.bsl
new file mode 100644
index 00000000..8837b158
--- /dev/null
+++ b/exts/yaxunit/src/Catalogs/ИсточникиДанных/ManagerModule.bsl
@@ -0,0 +1,40 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+#Если НЕ (ТонкийКлиент ИЛИ ВебКлиент) Тогда
+
+&Вместо("СохраненныеБезопасныеДанные")
+Функция ЮТСохраненныеБезопасныеДанные(Владелец, Знач Ключи) Экспорт
+
+ // Собираем параметры в массив
+ ПараметрыМетода = Мокито.МассивПараметров(Владелец, Ключи);
+
+ // Отправляем данные на анализ
+ ПрерватьВыполнение = Ложь;
+ Результат = Мокито.АнализВызова(Справочники.ИсточникиДанных, "СохраненныеБезопасныеДанные", ПараметрыМетода, ПрерватьВыполнение);
+
+ // Обрабатываем результат анализа
+ Если НЕ ПрерватьВыполнение Тогда
+ Возврат ПродолжитьВызов(Владелец, Ключи);
+ Иначе
+ Возврат Результат;
+ КонецЕсли;
+
+КонецФункции
+
+#КонецЕсли
diff --git a/exts/yaxunit/src/Catalogs/ИсточникиДанных/ObjectModule.bsl b/exts/yaxunit/src/Catalogs/ИсточникиДанных/ObjectModule.bsl
new file mode 100644
index 00000000..4ed5fc3f
--- /dev/null
+++ b/exts/yaxunit/src/Catalogs/ИсточникиДанных/ObjectModule.bsl
@@ -0,0 +1,31 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+&Вместо("ПеренестиДанныеВБезопасноеХранилище")
+Процедура ЮТПеренестиДанныеВБезопасноеХранилище()
+
+ ПараметрыМетода = Новый Массив;
+
+ ПрерватьВыполнение = Ложь;
+ Мокито.АнализВызова(ЭтотОбъект, "ПеренестиДанныеВБезопасноеХранилище", ПараметрыМетода, ПрерватьВыполнение);
+
+ Если НЕ ПрерватьВыполнение Тогда
+ ПродолжитьВызов();
+ КонецЕсли;
+
+КонецПроцедуры
diff --git a/exts/yaxunit/src/Catalogs/ИсточникиДанных/ИсточникиДанных.mdo b/exts/yaxunit/src/Catalogs/ИсточникиДанных/ИсточникиДанных.mdo
new file mode 100644
index 00000000..a24d11f4
--- /dev/null
+++ b/exts/yaxunit/src/Catalogs/ИсточникиДанных/ИсточникиДанных.mdo
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+ ИсточникиДанных
+ Adopted
+
+ Extended
+ Extended
+
+
diff --git a/exts/yaxunit/src/CommonModules/Мокито/Module.bsl b/exts/yaxunit/src/CommonModules/Мокито/Module.bsl
new file mode 100644
index 00000000..34ee124f
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/Мокито/Module.bsl
@@ -0,0 +1,181 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+///////////////////////////////////////////////////////////////////
+// ПрограммныйИнтерфейс
+// Экспортные процедуры и функции для прикладного использования
+///////////////////////////////////////////////////////////////////
+#Область ПрограммныйИнтерфейс
+
+// Обучение.
+// Начинает обучение мокито для регистрации правил подмены вызовов методов
+//
+// Параметры:
+// Объект - Произвольный - Объект, методы которого хотим подменить
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+// Пример:
+// Для работы Мокито необходимо добавить обрабатываемые методы в расширение по следующей схеме
+//
+// &Вместо("ВыполнитьЗапрос")
+// Функция ЮТВыполнитьЗапрос(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки) Экспорт
+//
+// ПараметрыМетода = Мокито.МассивПараметров(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки);
+//
+// ПрерватьВыполнение = Ложь;
+// Результат = Мокито.АнализВызова(РаботаСHTTP, "ВыполнитьЗапрос", ПараметрыМетода, ПрерватьВыполнение);
+//
+// Если НЕ ПрерватьВыполнение Тогда
+// Возврат ПродолжитьВызов(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки);
+// Иначе
+// Возврат Результат;
+// КонецЕсли;
+//
+// КонецФункции
+Функция Обучение(Объект) Экспорт
+
+ Режимы = МокитоСлужебный.РежимыРаботы();
+ МокитоСлужебный.УстановитьРежим(Режимы.Обучение);
+
+ Возврат МокитоОбучение.Обучение(Объект);
+
+КонецФункции
+
+// Прогон
+// Переводит мокито в режим прогона тестов
+// Вызов этого метода обязателен перед выполнением тестового прогона метода
+Процедура Прогон() Экспорт
+
+ Режимы = МокитоСлужебный.РежимыРаботы();
+ МокитоСлужебный.УстановитьРежим(Режимы.Тестирование);
+
+КонецПроцедуры
+
+// Проверить.
+// Переводит мокито в режим проверки вызовов
+// Параметры:
+// Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Проверить(Объект) Экспорт
+
+ Режимы = МокитоСлужебный.РежимыРаботы();
+ МокитоСлужебный.УстановитьРежим(Режимы.Проверка);
+
+ Возврат МокитоПроверки.Проверить(Объект);
+
+КонецФункции
+
+// Сбросить
+// Сбрасывает настройки, переинициализирует мокито
+Процедура Сбросить() Экспорт
+
+ МокитоСлужебный.СброситьПараметры();
+
+КонецПроцедуры
+
+#Область КонструкторыПараметров
+
+// Любой параметр.
+// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
+// Указывает, что в метод может передаваться любой параметр
+// Возвращаемое значение:
+// см. МокитоСлужебный.ОписаниеМаскиПараметра
+Функция ЛюбойПараметр() Экспорт
+
+ МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Любой, 0);
+
+ Возврат МаскаПараметра;
+
+КонецФункции
+
+// Числовой параметр.
+// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
+// Указывает, что в метод может передаваться числовой параметр
+// Возвращаемое значение:
+// см. Мокито.ТипизированныйПараметр
+Функция ЧисловойПараметр() Экспорт
+
+ Возврат ТипизированныйПараметр(Тип("Число"));
+
+КонецФункции
+
+// Строковый параметр.
+// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
+// Указывает, что в метод может передаваться строковый параметр
+// Возвращаемое значение:
+// см. Мокито.ТипизированныйПараметр
+Функция СтроковыйПараметр() Экспорт
+
+ Возврат ТипизированныйПараметр(Тип("Строка"));
+
+КонецФункции
+
+// Типизированный параметр.
+// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
+// Указывает, что в метод может передаваться параметр указанного типа
+//
+// Параметры:
+// Тип - Тип - Ограничение типа параметра
+//
+// Возвращаемое значение:
+// см. МокитоСлужебный.ОписаниеМаскиПараметра
+Функция ТипизированныйПараметр(Тип) Экспорт
+
+ МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 1);
+ МаскаПараметра.Вставить("Тип", Тип);
+
+ Возврат МаскаПараметра;
+
+КонецФункции
+
+Функция МассивПараметров(Параметр1 = "_!%*",
+ Параметр2 = "_!%*",
+ Параметр3 = "_!%*",
+ Параметр4 = "_!%*",
+ Параметр5 = "_!%*",
+ Параметр6 = "_!%*",
+ Параметр7 = "_!%*",
+ Параметр8 = "_!%*",
+ Параметр9 = "_!%*",
+ Параметр10 = "_!%*") Экспорт
+
+ Возврат МокитоСлужебный.МассивПараметров(Параметр1,
+ Параметр2,
+ Параметр3,
+ Параметр4,
+ Параметр5,
+ Параметр6,
+ Параметр7,
+ Параметр8,
+ Параметр9,
+ Параметр10);
+
+КонецФункции
+
+#КонецОбласти
+
+Функция АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение) Экспорт
+
+ Возврат МокитоСлужебный.АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение);
+
+КонецФункции
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ОМ_ЮТ/ОМ_ЮТ.mdo b/exts/yaxunit/src/CommonModules/Мокито/Мокито.mdo
similarity index 52%
rename from exts/yaxunit/src/CommonModules/ОМ_ЮТ/ОМ_ЮТ.mdo
rename to exts/yaxunit/src/CommonModules/Мокито/Мокито.mdo
index 095e9d3c..96b905dc 100644
--- a/exts/yaxunit/src/CommonModules/ОМ_ЮТ/ОМ_ЮТ.mdo
+++ b/exts/yaxunit/src/CommonModules/Мокито/Мокито.mdo
@@ -1,9 +1,11 @@
-
- ОМ_ЮТ
+
+ Мокито
ru
- ЮТ
+ Мокито
true
+ true
+ true
diff --git a/exts/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl
new file mode 100644
index 00000000..9f460214
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl
@@ -0,0 +1,276 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+///////////////////////////////////////////////////////////////////
+// ПрограммныйИнтерфейс
+// Экспортные процедуры и функции для прикладного использования
+///////////////////////////////////////////////////////////////////
+#Область ПрограммныйИнтерфейс
+
+// Обучение.
+// Начинает обучение мокито для регистрации правил подмены вызовов методов
+//
+// Параметры:
+// Объект - Произвольный - Объект, методы которого хотим подменить
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Обучение(Объект) Экспорт
+
+ УстановитьПараметрыОбучения(Объект);
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Наблюдать.
+//
+// Параметры:
+// ИмяМетода - Строка - Имя метода обучаемого объекта
+// - Произвольный - Вызов метода обучаемого объекта
+// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода обучаемого объекта
+// Варианты вызова:
+// Мокито.Обучение(Произвольный).Когда(Строка, Массив); // Вызов через указание имени метода и параметров
+// Мокито.Обучение(Произвольный).Когда(Произвольный); // Вызов через явное выполнение наблюдаемого метода
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+// Пример:
+// Мокито.Обучение(ОбщегоНазначения).Наблюдать("ЭтоДопустимоеИмяПеременной", Мокито.МассивПараметров(""));
+// Мокито.Обучение(ОбщегоНазначения).Наблюдать(ОбщегоНазначения.ЭтоДопустимоеИмяПеременной(""));
+Функция Наблюдать(ИмяМетода, ПараметрыВызова = Неопределено) Экспорт
+
+ ЗарегистрироватьПерехватВыражения(ИмяМетода, ПараметрыВызова);
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Когда.
+//
+// Параметры:
+// ИмяМетода - Строка - Имя метода обучаемого объекта
+// - Произвольный - Вызов метода обучаемого объекта
+// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода обучаемого объекта
+// Варианты вызова:
+// Мокито.Обучение(Произвольный).Когда(Строка, Массив); // Вызов через указание имени метода и параметров
+// Мокито.Обучение(Произвольный).Когда(Произвольный); // Вызов через явное выполнение наблюдаемого метода
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+// Пример:
+// Мокито.Обучение(ОбщегоНазначения).Когда("ЭтоДопустимоеИмяПеременной", Мокито.МассивПараметров(""));
+// Мокито.Обучение(ОбщегоНазначения).Когда(ОбщегоНазначения.ЭтоДопустимоеИмяПеременной(""));
+Функция Когда(ИмяМетода, ПараметрыВызова = Неопределено) Экспорт
+
+ Возврат Наблюдать(ИмяМетода, ПараметрыВызова);
+
+КонецФункции
+
+// Вернуть.
+// Указывает, что при соблюдении условий метод должен вернуть переданное значение
+// Параметры:
+// Результат - Произвольный - Результат, который должен вернуть метод
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Вернуть(Результат) Экспорт
+
+ ЗарегистрироватьРеакцию(Новый Структура("ТипДействия, Результат", МокитоСлужебный.ТипыДействийРеакций().ВернутьРезультат, Результат));
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Выбросить исключение.
+// Указывает, что при соблюдении условий метод должен выбросить исключение
+//
+// Параметры:
+// ТекстИсключения - Строка
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция ВыброситьИсключение(ТекстИсключения) Экспорт
+
+ ЗарегистрироватьРеакцию(Новый Структура("ТипДействия, Ошибка", МокитоСлужебный.ТипыДействийРеакций().ВыброситьИсключение, ТекстИсключения));
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Пропустить.
+// Указывает, что при соблюдении условий метод не должен выполняться, его вызов пропускается
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Пропустить() Экспорт
+
+ ЗарегистрироватьРеакцию(Новый Структура("ТипДействия", МокитоСлужебный.ТипыДействийРеакций().Пропустить));
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Выполнить метод.
+// Указывает, что при соблюдении условий метод должен выполняться
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция ВыполнитьМетод() Экспорт
+
+ ЗарегистрироватьРеакцию(Новый Структура("ТипДействия", МокитоСлужебный.ТипыДействийРеакций().ВызватьОсновнойМетод));
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Прогон
+// Переводит мокито в режим прогона тестов
+// Вызов этого метода обязателен перед выполнением тестового прогона метода
+Процедура Прогон() Экспорт
+
+ Мокито.Прогон();
+
+КонецПроцедуры
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции для служебного использования внутри подсистемы
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Процедуры и функции, составляющие внутреннюю реализацию модуля
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ЗарегистрироватьПерехватВыражения(ИмяМетода, ПараметрыВызова)
+
+ Объект = ОбучаемыйОбъект();
+ ДанныеПерехвата = МокитоСлужебный.ДанныеПерехвата(Объект);
+
+ Если ДанныеПерехвата = Неопределено Тогда
+ Сообщение = СтрШаблон("Не найдены настройки перехвата для %1. Необходимо предварительно вызвать метод Мокито.Обучение(Объект)", Объект);
+ ВызватьИсключение Сообщение;
+ КонецЕсли;
+
+ Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
+ СтруктураВызоваМетода = ИмяМетода;
+ Иначе
+ СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыВызова);
+ КонецЕсли;
+
+ Методы = ДанныеПерехвата.Методы;
+
+ Если НЕ Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда
+ Методы.Вставить(СтруктураВызоваМетода.ИмяМетода, ОписаниеПараметровПерехватаМетода());
+ КонецЕсли;
+
+ Реакция = СоздатьОписаниеУсловнойРеакции(СтруктураВызоваМетода);
+
+ Методы[СтруктураВызоваМетода.ИмяМетода].Реакции.Добавить(Реакция);
+
+ ПараметрыОбучения().РеакцияТекущегоВыражения = Реакция;
+
+КонецПроцедуры
+
+Функция ОписаниеПараметровПерехватаМетода()
+
+ Возврат Новый Структура("Реакции", Новый Массив);
+
+КонецФункции
+
+#Область Реакции
+
+Функция СоздатьОписаниеУсловнойРеакции(СтруктураВызоваМетода)
+
+ Возврат Новый Структура("УсловиеРеакции, Действие", УсловиеРеакции(СтруктураВызоваМетода), Неопределено);
+
+КонецФункции
+
+Функция УсловиеРеакции(СтруктураВызоваМетода)
+
+ Параметры = СтруктураВызоваМетода.Параметры;
+
+ Если Параметры = Неопределено Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Условия = Новый Массив;
+
+ Для Каждого Параметр Из Параметры Цикл
+
+ Если МокитоСлужебный.ЭтоМаскаПарамера(Параметр) Тогда
+
+ Условия.Добавить(Параметр);
+
+ Иначе
+
+ Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 10));
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат Условия;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область Параметры
+
+Функция ОбучаемыйОбъект()
+
+ ПараметрыОбучения = ПараметрыОбучения();
+
+ Возврат ПараметрыОбучения.ОбучаемыйОбъект;
+
+КонецФункции
+
+Функция ПараметрыОбучения()
+
+ Параметры = МокитоСлужебный.Настройки().ПараметрыОбучения;
+
+ Возврат Параметры;
+
+КонецФункции
+
+Процедура УстановитьПараметрыОбучения(Объект)
+
+ ПараметрыОбучения = Новый Структура("ОбучаемыйОбъект, РеакцияТекущегоВыражения", Объект, Неопределено);
+
+ МокитоСлужебный.Настройки().ПараметрыОбучения = ПараметрыОбучения;
+ МокитоСлужебный.ЗарегистрироватьПерехватОбъекта(Объект);
+
+КонецПроцедуры
+
+Процедура ЗарегистрироватьРеакцию(Действие)
+
+ Действие.Вставить("Обработано", Ложь);
+
+ ПараметрыОбучения().РеакцияТекущегоВыражения.Действие = Действие;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/МокитоОбучение/МокитоОбучение.mdo b/exts/yaxunit/src/CommonModules/МокитоОбучение/МокитоОбучение.mdo
new file mode 100644
index 00000000..bbbbe02f
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/МокитоОбучение/МокитоОбучение.mdo
@@ -0,0 +1,11 @@
+
+
+ МокитоОбучение
+
+ ru
+ Мокито обучение
+
+ true
+ true
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl
new file mode 100644
index 00000000..1b809283
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl
@@ -0,0 +1,272 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+///////////////////////////////////////////////////////////////////
+// ПрограммныйИнтерфейс
+// Экспортные процедуры и функции для прикладного использования
+///////////////////////////////////////////////////////////////////
+#Область ПрограммныйИнтерфейс
+
+// Проверить.
+// Переводит мокито в режим проверки вызовов
+// Параметры:
+// Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Проверить(Объект) Экспорт
+
+ УстановитьПараметрыПроверки(Объект);
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Количество вызовов.
+// Считает вызовы метода по переданным параметрам
+// Параметры:
+// ИмяМетода - Строка - Имя метода проверяемого объекта
+// - Произвольный - Вызов метода проверяемого объекта
+// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода проверяемого объекта, необходим при указании имени метода
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция КоличествоВызовов(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
+
+ Параметры = ПараметрыПроверки();
+
+ Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
+ СтруктураВызоваМетода = ИмяМетода;
+ Иначе
+ СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова);
+ КонецЕсли;
+
+ Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда
+ ВызватьИсключение "Установлен другой проверяемый объект";
+ КонецЕсли;
+
+ Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода;
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Равно.
+// Проверяет подобранные вызовы. Их количество должно быть равно переданному значение, иначе вызывается исключение
+// Параметры:
+// Количество - Число - Ожидаемое количество вызовов
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Равно(Количество, Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов();
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .ИмеетДлину(Количество);
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Больше.
+// Проверяет подобранные вызовы. Их количество должно быть больше переданного значения, иначе вызывается исключение
+// Параметры:
+// Количество - Число
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Больше(Количество, Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов();
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .ИмеетДлинуБольше(Количество);
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Меньше.
+// Проверяет подобранные вызовы. Их количество должно быть меньше переданного значения, иначе вызывается исключение
+// Параметры:
+// Количество - Число
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Меньше(Количество, Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов();
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .ИмеетДлинуМеньше(Количество);
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Заполнено.
+// Проверяет, что есть вызовы метода, соответствующие условию
+// Параметры:
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Заполнено(Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов(Истина);
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .Заполнено();
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Пусто.
+// Проверяет, что нет вызовов метода, соответствующих условию
+// Параметры:
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Пусто(Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов(Истина);
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .НеЗаполнено();
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции для служебного использования внутри подсистемы
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Процедуры и функции, составляющие внутреннюю реализацию модуля
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныеПроцедурыИФункции
+
+#Область Параметры
+
+// Параметры проверки.
+//
+// Возвращаемое значение:
+// Структура:
+// * ПроверяемыйОбъект - Произвольный
+// * СтруктураВызоваМетода - см. МокитоСлужебный.СтруктураВызоваМетода
+Функция ПараметрыПроверки()
+
+ Параметры = МокитоСлужебный.Настройки().ПараметрыПроверки;
+
+ Возврат Параметры;
+
+КонецФункции
+
+Процедура УстановитьПараметрыПроверки(Объект = Неопределено, СтруктураВызоваМетода = Неопределено)
+
+ ПараметрыОбучения = Новый Структура("ПроверяемыйОбъект, СтруктураВызоваМетода", Объект, СтруктураВызоваМетода);
+
+ МокитоСлужебный.Настройки().ПараметрыПроверки = ПараметрыОбучения;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+Функция СтатистикаВызовов(Первый = Ложь)
+
+ Параметры = ПараметрыПроверки();
+ СтруктураВызоваМетода = Параметры.СтруктураВызоваМетода;
+
+ ВызовыМетода = МокитоСлужебный.СтатистикаВызовов(СтруктураВызоваМетода.Объект, СтруктураВызоваМетода.ИмяМетода);
+
+ Если ВызовыМетода = Неопределено Тогда
+ Возврат Новый Массив();
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(СтруктураВызоваМетода.Параметры) Тогда
+
+ Результат = Новый Массив();
+
+ Для Каждого ВызовМетода Из ВызовыМетода Цикл
+
+ Если ВызовМетода.Параметры.Количество() < СтруктураВызоваМетода.Параметры.Количество() Тогда
+ ВызватьИсключение "Сигнатура метода содержит меньше параметров";
+ КонецЕсли;
+
+ КоличествоПараметров = СтруктураВызоваМетода.Параметры.Количество();
+ Успешно = Истина;
+
+ Для Инд = 0 По КоличествоПараметров - 1 Цикл
+
+ Параметр = ВызовМетода.Параметры[Инд];
+ Условие = СтруктураВызоваМетода.Параметры[Инд];
+
+ Если МокитоСлужебный.ЭтоМаскаПарамера(Условие) Тогда
+ Успешно = МокитоСлужебный.ПроверитьПараметр(Параметр, Условие);
+ Иначе
+ Успешно = Параметр = Условие;
+ КонецЕсли;
+
+ Если НЕ Успешно Тогда
+ Прервать;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если Успешно Тогда
+ Результат.Добавить(ВызовМетода);
+ Если Первый Тогда
+ Прервать;
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ВызовыМетода = Результат;
+
+ КонецЕсли;
+
+ Возврат ВызовыМетода;
+
+КонецФункции
+
+Функция ОписаниеПроверяемогоОбъекта()
+
+ СтруктураВызоваМетода = ПараметрыПроверки().СтруктураВызоваМетода;
+ Объект = СтруктураВызоваМетода.Объект;
+ ПредставлениеТипа = ЮТОбщий.ПредставлениеТипа(ТипЗнч(Объект));
+ Возврат СтрШаблон(" - вызовы метода `%1(%2).%3`,", Объект, ПредставлениеТипа, СтруктураВызоваМетода.ИмяМетода);
+
+КонецФункции
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/МокитоПроверки/МокитоПроверки.mdo b/exts/yaxunit/src/CommonModules/МокитоПроверки/МокитоПроверки.mdo
new file mode 100644
index 00000000..cbc12b54
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/МокитоПроверки/МокитоПроверки.mdo
@@ -0,0 +1,11 @@
+
+
+ МокитоПроверки
+
+ ru
+ Мокито проверки
+
+ true
+ true
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl
new file mode 100644
index 00000000..7d1bc49d
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl
@@ -0,0 +1,581 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции для служебного использования внутри подсистемы
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция Включен() Экспорт
+
+ Возврат ЮТКонтекст.ДанныеКонтекста() <> Неопределено;
+
+КонецФункции
+
+Процедура УстановитьРежим(Режим) Экспорт
+
+ Контекст = Настройки();
+ Контекст.Режим = Режим;
+ ОчиститьСлужебныеПараметры();
+
+КонецПроцедуры
+
+Функция Настройки() Экспорт
+
+ Настройки = ЮТКонтекст.ЗначениеКонтекста(КлючНастроек());
+
+ Если Настройки = Неопределено Тогда
+ ВызватьИсключение "Что-то пошло не так, настройки Мокито не инициализированы";
+ КонецЕсли;
+
+ Возврат Настройки;
+
+КонецФункции
+
+#Область СтруктурыДанных
+
+Функция РежимыРаботы() Экспорт
+
+ Режимы = Новый Структура();
+ Режимы.Вставить("Обучение", "Обучение");
+ Режимы.Вставить("Тестирование", "Тестирование");
+ Режимы.Вставить("Проверка", "Проверка");
+
+ Возврат Новый ФиксированнаяСтруктура(Режимы);
+
+КонецФункции
+
+Функция ТипыДействийРеакций() Экспорт
+
+ ТипыРеакций = Новый Структура();
+ ТипыРеакций.Вставить("ВернутьРезультат", "ВернутьРезультат");
+ ТипыРеакций.Вставить("ВыброситьИсключение", "ВыброситьИсключение");
+ ТипыРеакций.Вставить("Пропустить", "Пропустить");
+ ТипыРеакций.Вставить("ВызватьОсновнойМетод", "ВызватьОсновнойМетод");
+
+ Возврат Новый ФиксированнаяСтруктура(ТипыРеакций);
+
+КонецФункции
+
+#КонецОбласти
+
+Функция АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение) Экспорт
+
+ ПрерватьВыполнение = Ложь;
+
+ Если НЕ Включен() Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Настройки = Настройки();
+
+ ПараметрыПерехвата = ДанныеПерехвата(Объект);
+
+ Если ПараметрыПерехвата = Неопределено Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ РежимыРаботы = РежимыРаботы();
+
+ СтруктураВызоваМетода = СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыМетода);
+
+ Если Настройки.Режим = РежимыРаботы.Обучение ИЛИ Настройки.Режим = РежимыРаботы.Проверка Тогда
+
+ ПрерватьВыполнение = Истина;
+ Возврат СтруктураВызоваМетода;
+
+ ИначеЕсли Настройки.Режим = РежимыРаботы.Тестирование Тогда
+
+ ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода);
+ Возврат ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение);
+
+ КонецЕсли;
+
+КонецФункции
+
+// Структура вызова метода.
+//
+// Параметры:
+// Объект - Произвольный - Объект, которому принадлежит метод
+// ИмяМетода - Строка - Имя вызванного метода
+// ПараметрыМетода - Массив из Произвольный - Набор параметров, с которыми был вызван метод
+//
+// Возвращаемое значение:
+// Структура - Информация о вызове метода:
+// * Объект - Произвольный - Объект, которому принадлежит метод
+// * ИмяМетода - Строка - Имя вызванного метода
+// * Параметры - Массив из Произвольный - Набор параметров, с которыми был вызван метод
+// * Контекст - Строка - Контекст вызова метода
+Функция СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыМетода) Экспорт
+
+ Если ЭтоСтруктураВызоваМетода(Объект) Тогда
+ Возврат Объект;
+ КонецЕсли;
+
+ СтруктураВызоваМетода = Новый Структура("Объект, ИмяМетода, Параметры", Объект, ИмяМетода, ПараметрыМетода);
+ СтруктураВызоваМетода.Вставить("Контекст");
+
+ Возврат СтруктураВызоваМетода;
+
+КонецФункции
+
+Функция ЭтоСтруктураВызоваМетода(Объект) Экспорт
+
+ Возврат ТипЗнч(Объект) = Тип("Структура");
+
+КонецФункции
+
+#Область Предикаты
+
+Функция ТипыУсловийПараметров() Экспорт
+
+ Типы = Новый Структура;
+ Типы.Вставить("Любой", "Любой");
+ Типы.Вставить("Значение", "Значение");
+ Типы.Вставить("Тип", "Тип");
+ Типы.Вставить("ОписаниеТипа", "ОписаниеТипа");
+
+ Возврат Новый ФиксированнаяСтруктура(Типы);
+
+КонецФункции
+
+Функция ОписаниеМаскиПараметра(ТипУсловия, Приоритет) Экспорт
+
+ МаскаПараметра = Новый Структура("МаскаСопоставленияПараметров", Истина);
+ МаскаПараметра.Вставить("Режим", ТипУсловия);
+ МаскаПараметра.Вставить("Приоритет", Приоритет);
+
+ Возврат МаскаПараметра;
+
+КонецФункции
+
+Функция ЭтоМаскаПарамера(Параметр) Экспорт
+
+ Возврат ТипЗнч(Параметр) = Тип("Структура") И Параметр.Свойство("МаскаСопоставленияПараметров") И Параметр.МаскаСопоставленияПараметров;
+
+КонецФункции
+
+Функция ПроверитьПараметр(Параметр, Условие) Экспорт
+
+ ТипыУсловий = ТипыУсловийПараметров();
+ Совпадает = Ложь;
+
+ Если Условие.Режим = ТипыУсловий.Любой Тогда
+
+ Совпадает = Истина;
+
+ ИначеЕсли Условие.Режим = ТипыУсловий.Значение Тогда
+
+ Совпадает = Условие.Значение = Параметр;
+
+ ИначеЕсли Условие.Режим = ТипыУсловий.Тип Тогда
+
+ Совпадает = Условие.Тип = ТипЗнч(Параметр);
+
+ ИначеЕсли Условие.Режим = ТипыУсловий.ОписаниеТипа Тогда
+
+ Совпадает = Условие.Тип.СодержитТип(ТипЗнч(Параметр));
+
+ КонецЕсли;
+
+ Возврат Совпадает;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область Перехват
+
+Функция ПараметрыПерехвата() Экспорт
+
+ Возврат Настройки().Перехват;
+
+КонецФункции
+
+// Данные перехвата.
+//
+// Параметры:
+// Объект - Произвольный
+//
+// Возвращаемое значение:
+// см. МокитоСлужебный.ОписаниеПараметровПерехватаОбъекта
+Функция ДанныеПерехвата(Объект) Экспорт
+
+ ПараметрыПерехвата = ПараметрыПерехвата();
+
+ Если ТипЗнч(Объект) = Тип("Структура") Тогда
+ Ключ = Объект.Объект;
+ Иначе
+ Ключ = Объект;
+ КонецЕсли;
+
+ ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Ключ];
+
+ Если ПараметрыПерехватаОбъекта = Неопределено И ЭтоОбъект(Ключ) Тогда
+ ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Ключ.Ссылка];
+ КонецЕсли;
+
+ Возврат ПараметрыПерехватаОбъекта;
+
+КонецФункции
+
+Процедура ЗарегистрироватьПерехватОбъекта(Знач Объект) Экспорт
+
+ Если ЭтоОбъект(Объект) Тогда
+ Объект = Объект.Ссылка;
+ КонецЕсли;
+
+ ПараметрыПерехвата = ПараметрыПерехвата();
+ ПараметрыПерехвата.Вставить(Объект, ОписаниеПараметровПерехватаОбъекта(Объект));
+
+КонецПроцедуры
+
+Функция ОписаниеПараметровПерехватаОбъекта(Объект) Экспорт
+
+ Возврат Новый Структура("Объект, Методы", Объект, Новый Структура);
+
+КонецФункции
+
+#КонецОбласти
+
+Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт
+
+ Если ЭтоОбъект(Объект) Тогда
+ Объект = Объект.Ссылка;
+ КонецЕсли;
+
+ Статистика = Настройки().Статистика.Вызовы[Объект];
+
+ Если Статистика = Неопределено ИЛИ НЕ Статистика.Свойство(ИмяМетода) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Возврат Статистика[ИмяМетода];
+
+КонецФункции
+
+#Область ОбработчикиСобытий
+
+Процедура ПередТестом(ОписаниеСобытия) Экспорт
+
+ ИнициализироватьНастройки();
+
+КонецПроцедуры
+
+Процедура ПослеТеста(ОписаниеСобытия) Экспорт
+
+ ОчиститьНастройки();
+
+КонецПроцедуры
+
+#КонецОбласти
+
+Функция МассивПараметров(Параметр1 = "_!%*",
+ Параметр2 = "_!%*",
+ Параметр3 = "_!%*",
+ Параметр4 = "_!%*",
+ Параметр5 = "_!%*",
+ Параметр6 = "_!%*",
+ Параметр7 = "_!%*",
+ Параметр8 = "_!%*",
+ Параметр9 = "_!%*",
+ Параметр10 = "_!%*") Экспорт
+
+ ФлагКонец = "_!%*";
+
+ Параметры = Новый Массив;
+
+ Если Параметр1 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр1);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр2 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр2);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр3 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр3);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр4 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр4);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр5 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр5);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр6 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр6);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр7 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр7);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр8 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр8);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр9 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр9);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Если Параметр10 <> ФлагКонец Тогда
+ Параметры.Добавить(Параметр10);
+ Иначе
+ Возврат Параметры;
+ КонецЕсли;
+
+ Возврат Параметры;
+
+КонецФункции
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Процедуры и функции, составляющие внутреннюю реализацию модуля
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныеПроцедурыИФункции
+
+#Область ОбработкаВызовов
+
+// Зарегистрировать вызов метода.
+//
+// Параметры:
+// Настройки - см. ИнициализироватьНастройки
+// ПараметрыПерехвата - см. ДанныеПерехвата
+// СтруктураВызоваМетода - см. СтруктураВызоваМетода
+Процедура ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода)
+
+ Объект = ПараметрыПерехвата.Объект;
+ ИмяМетода = СтруктураВызоваМетода.ИмяМетода;
+ Статистика = Настройки.Статистика.Вызовы[Объект];
+
+ Если Статистика = Неопределено Тогда
+
+ Статистика = Новый Структура;
+ Настройки.Статистика.Вызовы.Вставить(Объект, Статистика);
+
+ КонецЕсли;
+
+ Если НЕ Статистика.Свойство(ИмяМетода) Тогда
+
+ Статистика.Вставить(ИмяМетода, Новый Массив);
+
+ КонецЕсли;
+
+ Статистика[ИмяМетода].Добавить(СтруктураВызоваМетода);
+
+КонецПроцедуры
+
+Функция ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение)
+
+ Если НЕ ПараметрыПерехвата.Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ ПараметрыПерехватаМетода = ПараметрыПерехвата.Методы[СтруктураВызоваМетода.ИмяМетода];
+
+ Реакция = НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода);
+
+ Если Реакция = Неопределено ИЛИ Реакция.Действие = Неопределено Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ ПрерватьВыполнение = Истина;
+
+ ТипыДействий = ТипыДействийРеакций();
+
+ Если Реакция.Действие.ТипДействия = ТипыДействий.ВернутьРезультат Тогда
+
+ Реакция.Действие.Обработано = Истина;
+ Возврат Реакция.Действие.Результат;
+
+ ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.ВыброситьИсключение Тогда
+
+ Реакция.Действие.Обработано = Истина;
+ ВызватьИсключение Реакция.Действие.Ошибка;
+
+ ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.Пропустить Тогда
+
+ Реакция.Действие.Обработано = Истина;
+ Возврат Неопределено;
+
+ ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.ВызватьОсновнойМетод Тогда
+
+ Реакция.Действие.Обработано = Истина;
+ ПрерватьВыполнение = Ложь;
+
+ Иначе
+
+ ВызватьИсключение "Неизвестный тип действия реакции";
+
+ КонецЕсли;
+
+КонецФункции
+
+#КонецОбласти
+
+Функция НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода)
+
+ Реакция = Неопределено;
+ Приоритет = 0;
+ ПараметрыВызова = СтруктураВызоваМетода.Параметры;
+
+ Для Каждого ВозможнаяРеакция Из ПараметрыПерехватаМетода.Реакции Цикл
+
+ ПриоритетВозможнойРеакции = ПроверитьРеакцию(ВозможнаяРеакция, ПараметрыВызова);
+
+ Если ПриоритетВозможнойРеакции > Приоритет Тогда
+
+ Реакция = ВозможнаяРеакция;
+ Приоритет = ПриоритетВозможнойРеакции;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат Реакция;
+
+КонецФункции
+
+Функция ПроверитьРеакцию(Реакция, ПараметрыМетода)
+
+ Приоритет = 1;
+
+ Если Реакция.УсловиеРеакции = Неопределено Тогда
+ Возврат Приоритет;
+ КонецЕсли;
+
+ Для Инд = 0 По Реакция.УсловиеРеакции.ВГраница() Цикл
+
+ Если НЕ ПроверитьПараметр(ПараметрыМетода[Инд], Реакция.УсловиеРеакции[Инд]) Тогда
+
+ Возврат 0;
+
+ КонецЕсли;
+
+ Приоритет = Приоритет + Реакция.УсловиеРеакции[Инд].Приоритет;
+
+ КонецЦикла;
+
+ Возврат Приоритет;
+
+КонецФункции
+
+#Область Настройки
+
+Процедура ИнициализироватьНастройки() Экспорт
+
+ Настройки = Новый Структура;
+ Настройки.Вставить("Метод");
+ Настройки.Вставить("Реакция");
+ Настройки.Вставить("Настройки");
+ Настройки.Вставить("Перехват", Новый Соответствие);
+ Настройки.Вставить("Режим", "НеУстановлен");
+ Настройки.Вставить("Статистика", Новый Структура("Вызовы", Новый Соответствие));
+
+ Настройки.Вставить("ПараметрыОбучения", Неопределено);
+ Настройки.Вставить("ПараметрыПроверки", Неопределено);
+
+ ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Настройки);
+
+КонецПроцедуры
+
+Процедура ОчиститьНастройки() Экспорт
+
+ ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Неопределено);
+
+КонецПроцедуры
+
+Процедура СброситьПараметры() Экспорт
+
+ ИнициализироватьНастройки();
+
+КонецПроцедуры
+
+Функция КлючНастроек()
+
+ Возврат "Mockito";
+
+КонецФункции
+
+Процедура ОчиститьСлужебныеПараметры()
+
+ Настройки = Настройки();
+
+ Настройки.ПараметрыОбучения = Неопределено;
+ Настройки.ПараметрыПроверки = Неопределено;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+Функция ЭтоСсылка(Значение) Экспорт
+
+ Если Значение <> Неопределено Тогда
+
+ ТипыСсылок = ОбщегоНазначенияКлиентСервер.ПолучитьОписаниеТиповЛюбаяСсылка();
+ Результат = ТипыСсылок.СодержитТип(ТипЗнч(Значение));
+
+ Иначе
+
+ Результат = Ложь;
+
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция ЭтоОбъект(Значение) Экспорт
+
+ Если Значение <> Неопределено И ОбщегоНазначенияКлиентСервер.ПеременнаяСодержитСвойство(Значение, "Ссылка") Тогда
+
+ Возврат ЭтоСсылка(Значение.Ссылка);
+
+ Иначе
+
+ Результат = Ложь;
+
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/МокитоСлужебный/МокитоСлужебный.mdo b/exts/yaxunit/src/CommonModules/МокитоСлужебный/МокитоСлужебный.mdo
new file mode 100644
index 00000000..d562e123
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/МокитоСлужебный/МокитоСлужебный.mdo
@@ -0,0 +1,11 @@
+
+
+ МокитоСлужебный
+
+ ru
+ Мокито служебный
+
+ true
+ true
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/ОМ_Мокито/Module.bsl b/exts/yaxunit/src/CommonModules/ОМ_Мокито/Module.bsl
new file mode 100644
index 00000000..041b1f02
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ОМ_Мокито/Module.bsl
@@ -0,0 +1,182 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+// @strict-types
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции, предназначенные для использования другими
+// объектами конфигурации или другими программами
+/////////////////////////////////////////////////////////////////////////////////
+#Область ТестыAPI
+
+Процедура ИсполняемыеСценарии() Экспорт
+
+ ЮТТесты
+ .Тест("Обучение")
+ .Тест("Проверить")
+ .Тест("МокированиеМетодовСсылочныхОбъектов")
+ .Тест("НастройкаСерверныхМоковСКлиента")
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Тесты
+
+Процедура Обучение() Экспорт
+
+ Описание = "Обучение через явный вызов метода";
+ Мокито.Обучение(РаботаСHTTP)
+ .Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(Мокито.ЛюбойПараметр(), Мокито.ЛюбойПараметр()))
+ .Вернуть(1)
+ .Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 2))
+ .Вернуть(10)
+ .Прогон();
+
+ ЮТУтверждения.Что(РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 2), Описание + ". Кейс 1")
+ .Равно(10);
+ ЮТУтверждения.Что(РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 1), Описание + ". Кейс 2")
+ .Равно(1);
+
+ Описание = "Обучение через указание имени и набора параметров";
+ Мокито.Обучение(РаботаСHTTP)
+ .Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(Мокито.ЛюбойПараметр(), Мокито.ЛюбойПараметр()))
+ .Вернуть(20)
+ .Когда("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(Справочники.ИсточникиДанных.FTP, 2))
+ .Вернуть(2)
+ .Прогон();
+
+ ЮТУтверждения.Что(РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 2), Описание + ". Кейс 1")
+ .Равно(2);
+ ЮТУтверждения.Что(РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 1), Описание + ". Кейс 2")
+ .Равно(20);
+
+КонецПроцедуры
+
+Процедура Проверить() Экспорт
+
+ ЛюбойПараметр = Мокито.ЛюбойПараметр();
+ ТипИсточникДанных = Тип("СправочникСсылка.ИсточникиДанных");
+
+ Мокито.Обучение(РаботаСHTTP)
+ .Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(ЛюбойПараметр, ЛюбойПараметр))
+ .Вернуть(1)
+ .Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 2))
+ .Вернуть(10)
+ .Прогон();
+
+ РаботаСHTTP.ОтправитьОбъектНаСервер("Справочники.ИсточникиДанных.FTP", Неопределено);
+ РаботаСHTTP.ОтправитьОбъектНаСервер(Справочники.ИсточникиДанных.FTP, 2);
+ РаботаСHTTP.ОтправитьОбъектНаСервер(1, 2);
+
+ Мокито.Проверить(РаботаСHTTP)
+ .КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(ЛюбойПараметр, Мокито.ЧисловойПараметр())).Больше(1).Равно(2)
+ .КоличествоВызовов("ОтправитьОбъектНаСервер").Заполнено().Равно(3).Меньше(6)
+ .КоличествоВызовов("ОтправитьЗапросHTTP").Пусто().Меньше(1)
+ .КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(1, 2)).Равно(1)
+ .КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(ЛюбойПараметр, ЛюбойПараметр)).Равно(3)
+ .КоличествоВызовов(РаботаСHTTP.ОтправитьОбъектНаСервер(Мокито.ТипизированныйПараметр(ТипИсточникДанных), ЛюбойПараметр)).Равно(1)
+ ;
+
+КонецПроцедуры
+
+Процедура МокированиеМетодовСсылочныхОбъектов() Экспорт
+
+ Результат = Новый УникальныйИдентификатор();
+ // Мокирование обработки проведения (выключение алгоритма проведения)
+ Документ = ЮТТестовыеДанные.СоздатьДокумент(Документы.ЧекККМ);
+ Мокито.Обучение(Документ)
+ .Когда("ОбработкаПроведения").Пропустить()
+ .Прогон();
+ Объект = Документ.ПолучитьОбъект();
+ Объект.ВОжидании = Истина;
+ Объект.Записать(РежимЗаписиДокумента.Проведение);
+
+ Мокито.Проверить(Объект).КоличествоВызовов("ОбработкаПроведения").Заполнено();
+ Мокито.Проверить(Документ).КоличествоВызовов("ОбработкаПроведения").Заполнено();
+
+ Справочник = ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ДополнительныеПараметрыЖурналаДействийПользователя);
+ СправочникОбъект = Справочник.ПолучитьОбъект();
+
+ // Мокирование экспортного метода объекта, указание имени метода
+ Описание = "Мокирование экспортного метода объекта, указание имени метода";
+ Мокито.Обучение(Справочник)
+ .Когда("ПолучитьСтруктуруИзХранилища").Вернуть(Результат)
+ .Прогон();
+
+ ЮТУтверждения.Что(СправочникОбъект.ПолучитьСтруктуруИзХранилища(), Описание)
+ .Равно(Результат);
+
+ Мокито.Проверить(Справочник).КоличествоВызовов("ПолучитьСтруктуруИзХранилища").Заполнено();
+
+ // Мокирование экспортного метода объекта, явный вызов метода
+ Мокито.Сбросить();
+ Описание = "Мокирование экспортного метода объекта, явный вызов метода";
+ Мокито.Обучение(СправочникОбъект)
+ .Когда(СправочникОбъект.ПолучитьСтруктуруИзХранилища()).Вернуть(Результат)
+ .Прогон();
+
+ ЮТУтверждения.Что(Справочник.ПолучитьОбъект().ПолучитьСтруктуруИзХранилища(), Описание)
+ .Равно(Результат);
+
+ Мокито.Проверить(Справочник).КоличествоВызовов("ПолучитьСтруктуруИзХранилища").Заполнено(Описание);
+
+ // Мокирование приватного метода
+ Мокито.Сбросить();
+ Описание = "Мокирование приватного метода";
+ Справочник = ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ИсточникиДанных);
+ СправочникОбъект = Справочник.ПолучитьОбъект();
+ Пароль = "123";
+ Пользователь = "админ";
+
+ СправочникОбъект.Пользователь = Пользователь;
+ СправочникОбъект.Пароль = Пароль;
+ СправочникОбъект.Записать();
+ ЮТУтверждения.Что(СправочникОбъект, Описание + ". До мокирования")
+ .Свойство("Пользователь").Равно(Пользователь)
+ .Свойство("Пароль").НеЗаполнено();
+
+ Мокито.Обучение(СправочникОбъект)
+ .Когда("ПеренестиДанныеВБезопасноеХранилище").Пропустить()
+ .Прогон();
+
+ СправочникОбъект.Пользователь = Пользователь;
+ СправочникОбъект.Пароль = Пароль;
+ СправочникОбъект.Записать();
+ ЮТУтверждения.Что(СправочникОбъект, Описание + ". После мокирования")
+ .Свойство("Пользователь").Равно(Пользователь)
+ .Свойство("Пароль").Равно(Пароль);
+
+ // Мокирование модуля менеджера
+ Мокито.Сбросить();
+ Описание = "Мокирование модуля менеджера";
+ Мокито.Обучение(Справочники.ИсточникиДанных)
+ .Когда(Справочники.ИсточникиДанных.СохраненныеБезопасныеДанные(Справочник)).Вернуть(Результат)
+ .Прогон();
+
+ ЮТУтверждения.Что(Справочники.ИсточникиДанных.СохраненныеБезопасныеДанные(Справочник), Описание)
+ .Равно(Результат);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ОМ_Мокито/ОМ_Мокито.mdo b/exts/yaxunit/src/CommonModules/ОМ_Мокито/ОМ_Мокито.mdo
new file mode 100644
index 00000000..cda5e6d2
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ОМ_Мокито/ОМ_Мокито.mdo
@@ -0,0 +1,9 @@
+
+
+ ОМ_Мокито
+
+ ru
+ О м мокито
+
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/ОМ_ЮТ/Module.bsl b/exts/yaxunit/src/CommonModules/ОМ_МокитоОбучение/Module.bsl
similarity index 51%
rename from exts/yaxunit/src/CommonModules/ОМ_ЮТ/Module.bsl
rename to exts/yaxunit/src/CommonModules/ОМ_МокитоОбучение/Module.bsl
index ebc73394..783419b5 100644
--- a/exts/yaxunit/src/CommonModules/ОМ_ЮТ/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ОМ_МокитоОбучение/Module.bsl
@@ -24,33 +24,39 @@
/////////////////////////////////////////////////////////////////////////////////
#Область ТестыAPI
-Процедура ИсполняемыеСценарии() Экспорт
+Процедура ИсполняемыеСценарии(ДополнительныеПараметры = Неопределено) Экспорт
ЮТТесты
- .ТестКлиент("ВыполнитьМодульноеТестирование");
-
+ .Тест("ВыброситьИсключение")
+ ;
+
КонецПроцедуры
#КонецОбласти
#Область Тесты
-Процедура ВыполнитьМодульноеТестирование() Экспорт
+Процедура ВыброситьИсключение() Экспорт
- ПараметрыЗапуска = ЮТФабрика.ПараметрыЗапуска();
- ПараметрыЗапуска.CloseAfterTests = Ложь;
- ПараметрыЗапуска.filter.extensions = ЮТОбщий.ЗначениеВМассиве("tests");
- ПараметрыЗапуска.ВыполнятьМодульноеТестирование = Истина;
+ ИсточникДанных = ПредопределенноеЗначение("Справочник.ИсточникиДанных.FTP");
- ЮТУтверждения.Что(ЮТ, "Не указан каталог отчетов")
- .Метод("ВыполнитьМодульноеТестирование").Параметр(ПараметрыЗапуска)
- .ВыбрасываетИсключение("Не указан путь сохранения отчета");
-
- ПараметрыЗапуска.reportPath = ЮТТестовыеДанные.НовыйФайл();
- ЮТУтверждения.Что(ЮТ, "Указан каталог отчетов")
- .Метод("ВыполнитьМодульноеТестирование").Параметр(ПараметрыЗапуска)
- .НеВыбрасываетИсключение();
+ Мокито.Обучение(РаботаСHTTP)
+ .Когда("ОтправитьОбъектНаСервер")
+ .ВыброситьИсключение("Не верные параметры вызова")
+ .Когда(РаботаСHTTP.ОтправитьОбъектНаСервер(ИсточникДанных, Мокито.ЛюбойПараметр()))
+ .Вернуть(1)
+ .Прогон();
+
+ ЮТУтверждения.Что(РаботаСHTTP)
+ .Метод("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(ИсточникДанных, 1))
+ .НеВыбрасываетИсключение()
+ .Метод("ОтправитьОбъектНаСервер", Мокито.МассивПараметров(1, 1))
+ .ВыбрасываетИсключение("Не верные параметры вызова");
КонецПроцедуры
#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ОМ_МокитоОбучение/ОМ_МокитоОбучение.mdo b/exts/yaxunit/src/CommonModules/ОМ_МокитоОбучение/ОМ_МокитоОбучение.mdo
new file mode 100644
index 00000000..065bc784
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ОМ_МокитоОбучение/ОМ_МокитоОбучение.mdo
@@ -0,0 +1,9 @@
+
+
+ ОМ_МокитоОбучение
+
+ ru
+ Мокито обучение
+
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl b/exts/yaxunit/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl
index 84fccdb8..91691007 100644
--- a/exts/yaxunit/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ОМ_ЮТУтверждения/Module.bsl
@@ -112,7 +112,7 @@
Ошибка = ИнформацияОбОшибке();
КонецПопытки;
ПроверитьОшибкуУтверждения(Ошибка, "Ожидали, что проверяемое значение `Структура` содержит свойство `ЧужоеСвойство`, но это не так");
- ПроверитьДанныеОшибкиСравнения(Неопределено, "ЧужоеСвойство");
+ ПроверитьДанныеОшибкиСравнения(Объект, "ЧужоеСвойство");
Попытка
Ошибка = Неопределено;
diff --git a/exts/yaxunit/src/CommonModules/РаботаСHTTP/Module.bsl b/exts/yaxunit/src/CommonModules/РаботаСHTTP/Module.bsl
new file mode 100644
index 00000000..1ab92e66
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/РаботаСHTTP/Module.bsl
@@ -0,0 +1,52 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+&Вместо("ОтправитьОбъектНаСервер")
+Функция ЮТОтправитьОбъектНаСервер(ИсточникДанных, Объект, HTTPМетод, ТипКонтента, Преобразование, ДопНастройки, Ответ, ОтветВСтруктуру, ТелоОтветаВХранилище) Экспорт
+
+ // Собираем параметры в массив
+ ПараметрыМетода = Мокито.МассивПараметров(ИсточникДанных, Объект, HTTPМетод, ТипКонтента, Преобразование, ДопНастройки, Ответ, ОтветВСтруктуру, ТелоОтветаВХранилище);
+
+ // Отправляем данные на анализ
+ ПрерватьВыполнение = Ложь;
+ Результат = Мокито.АнализВызова(РаботаСHTTP, "ОтправитьОбъектНаСервер", ПараметрыМетода, ПрерватьВыполнение);
+
+ // Обрабатываем результат анализа
+ Если НЕ ПрерватьВыполнение Тогда
+ Возврат ПродолжитьВызов(ИсточникДанных, Объект, HTTPМетод, ТипКонтента, Преобразование, ДопНастройки, Ответ, ОтветВСтруктуру, ТелоОтветаВХранилище);
+ Иначе
+ Возврат Результат;
+ КонецЕсли;
+
+КонецФункции
+
+&Вместо("ОтправитьЗапросHTTP")
+Функция ЮТОтправитьЗапросHTTP(ИсточникДанных, HTTPМетод, АдресСкрипта, СтруктураТела, Ответ, СтруктураАвторизации, Параметры, Заголовки, ОтветВСтруктуру, ТелоОтветаВХранилище) Экспорт
+
+ ПараметрыМетода = Мокито.МассивПараметров(ИсточникДанных, HTTPМетод, АдресСкрипта, СтруктураТела, Ответ, СтруктураАвторизации, Параметры, Заголовки, ОтветВСтруктуру, ТелоОтветаВХранилище);
+
+ ПрерватьВыполнение = Ложь;
+ Результат = Мокито.АнализВызова(РаботаСHTTP, "ОтправитьЗапросHTTP", ПараметрыМетода, ПрерватьВыполнение);
+
+ Если НЕ ПрерватьВыполнение Тогда
+ Возврат ПродолжитьВызов(ИсточникДанных, HTTPМетод, АдресСкрипта, СтруктураТела, Ответ, СтруктураАвторизации, Параметры, Заголовки, ОтветВСтруктуру, ТелоОтветаВХранилище);
+ Иначе
+ Возврат Результат;
+ КонецЕсли;
+
+КонецФункции
diff --git a/exts/yaxunit/src/CommonModules/РаботаСHTTP/РаботаСHTTP.mdo b/exts/yaxunit/src/CommonModules/РаботаСHTTP/РаботаСHTTP.mdo
new file mode 100644
index 00000000..c228b9e5
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/РаботаСHTTP/РаботаСHTTP.mdo
@@ -0,0 +1,17 @@
+
+
+ РаботаСHTTP
+ Adopted
+
+ Extended
+ Checked
+ Checked
+ Checked
+ Checked
+ Checked
+ Checked
+
+ true
+ true
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl
index 63edd818..c63a93b4 100644
--- a/exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl
@@ -49,6 +49,8 @@
// Массив из см. ЮТФабрика.ОписаниеМодуля - Коллекция описаний моделей, структуру элемента см. ЮТФабрика.ОписаниеМодуля
Функция МодулиРасширений() Экспорт
+ УстановитьПривилегированныйРежим(Истина);
+
МетаданныеМодулей = Новый Массив;
Для Каждого Модуль Из Метаданные.ОбщиеМодули Цикл
diff --git a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
index ac523cb9..dc415f4d 100644
--- a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
@@ -715,6 +715,18 @@
КонецФункции
+Функция ПредставлениеТипа(Тип) Экспорт
+
+ ТипXML = СериализаторXDTO.XMLТип(Тип);
+
+ Если ТипXML = Неопределено Тогда
+ Возврат "";
+ Иначе
+ Возврат ТипXML.ИмяТипа;
+ КонецЕсли;
+
+КонецФункции
+
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
diff --git a/exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl
index ad1f3fd0..49048b5c 100644
--- a/exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибок/Module.bsl
@@ -432,14 +432,18 @@
ВставкаСвойство = "";
КонецЕсли;
- ПроверяемоеЗначение = Контекст.ПроверяемоеЗначение;
+ Если ЗначениеЗаполнено(Контекст.ПредставлениеПроверяемогоЗначения) Тогда
+ ПредставлениеЗначения = Контекст.ПредставлениеПроверяемогоЗначения;
+ Иначе
+ ПредставлениеЗначения = СтрШаблон("`%1`", Контекст.ПроверяемоеЗначение);
+ КонецЕсли;
// Заголовок сообщения
ТекстСообщения = "";
// Тело сообщения
- ТекстСообщения = СтрШаблон("ожидали, что %1 `%2`%3 %4, но это не так.",
+ ТекстСообщения = СтрШаблон("ожидали, что %1 %2%3 %4, но это не так.",
ОбъектПроверки,
- ПроверяемоеЗначение,
+ ПредставлениеЗначения,
ВставкаСвойство,
ТекстОжидания);
diff --git a/exts/yaxunit/src/CommonModules/ЮТСобытия/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТСобытия/Module.bsl
index e544835f..0a0cc9f5 100644
--- a/exts/yaxunit/src/CommonModules/ЮТСобытия/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТСобытия/Module.bsl
@@ -137,6 +137,7 @@
ВызватьОбработчикТестовогоМодуля(ИмяСобытия, ОписаниеСобытия);
ВызватьОбработчикРасширения(ИмяСобытия, ОписаниеСобытия);
КонецЕсли;
+
КонецПроцедуры
#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
index df8a9262..819c11fa 100644
--- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
@@ -38,7 +38,7 @@
Если ЗначениеЗаполнено(Наименование) Тогда
Объект.Наименование = Наименование;
- Иначе
+ ИначеЕсли Объект.Метаданные().ДлинаНаименования > 0 Тогда
Объект.Наименование = Новый УникальныйИдентификатор();
КонецЕсли;
@@ -59,7 +59,7 @@
// Реквизиты - Структура, Неопределено - Значения реквизитов элемента
//
// Возвращаемое значение:
-// ЛюбаяСсылка - Ссылка на созданный объект
+// ДокументСсылка - Ссылка на созданный объект
Функция СоздатьДокумент(Менеджер, Реквизиты = Неопределено) Экспорт
Объект = Менеджер.СоздатьДокумент();
diff --git a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
index ae68d238..0c736b58 100644
--- a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
@@ -93,6 +93,13 @@
КонецФункции
+Функция ИмеющееПредставление(Представление) Экспорт
+
+ Контекст().ПредставлениеПроверяемогоЗначения = Представление;
+ Возврат ЮТУтверждения;
+
+КонецФункции
+
// Свойство
// Проверяет наличие свойства и запоминает имя свойства для последующей проверки
// Следующая проверка будет относится к этому свойству
@@ -590,7 +597,7 @@
// - ТаблицаЗначения
//
// Параметры:
-// ОжидаемоеЗначение - Число - Ожидается, что значение Контекста (или его свойство) имеет указанную дину или размер
+// ОжидаемоеЗначение - Число - Ожидается, что значение Контекста (или его свойство) имеет указанную длину или размер
// ОписаниеПроверки - Строка - Описание конкретной проверки
//
// Возвращаемое значение:
@@ -603,6 +610,72 @@
КонецФункции
+// ИмеетДлинуБольше
+// Проверяет установленное значение Контекста (или его свойство) на длину или размер коллекции
+// Проверка поддерживается для следующих типов проверяемого значения:
+// - Строка
+// - Массив
+// - Структура
+// - Соответствие
+// - СписокЗначений
+// - ФиксированныйМассив
+// - ФиксированнаяСтруктура
+// - ФиксированноеСоответствие
+// - ТаблицаЗначения
+//
+// Параметры:
+// ОжидаемоеЗначение - Число - Ожидается, что значение Контекста (или его свойство) имеет указанную длину или размер
+// ОписаниеПроверки - Строка - Описание конкретной проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Этот модуль для замыкания
+Функция ИмеетДлинуБольше(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт
+
+ УстановитьОписаниеПроверки(ОписаниеПроверки);
+ ПроверитьТипЗначения(ОжидаемоеЗначение, "Число");
+
+ ФактическаяДлина = ДлинаПроверяемогоЗначения();
+ Результат = ФактическаяДлина > ОжидаемоеЗначение;
+
+ Сообщение = СтрШаблон("имеет длину (размер) больше `%1`", ОжидаемоеЗначение);
+ ОбработатьРезультатСравнения(Результат, Сообщение, Ложь, ФактическаяДлина, ОжидаемоеЗначение);
+ Возврат ЮТУтверждения;
+
+КонецФункции
+
+// ИмеетДлинуМеньше
+// Проверяет установленное значение Контекста (или его свойство) на длину или размер коллекции
+// Проверка поддерживается для следующих типов проверяемого значения:
+// - Строка
+// - Массив
+// - Структура
+// - Соответствие
+// - СписокЗначений
+// - ФиксированныйМассив
+// - ФиксированнаяСтруктура
+// - ФиксированноеСоответствие
+// - ТаблицаЗначения
+//
+// Параметры:
+// ОжидаемоеЗначение - Число - Ожидается, что значение Контекста (или его свойство) имеет указанную длину или размер
+// ОписаниеПроверки - Строка - Описание конкретной проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Этот модуль для замыкания
+Функция ИмеетДлинуМеньше(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт
+
+ УстановитьОписаниеПроверки(ОписаниеПроверки);
+ ПроверитьТипЗначения(ОжидаемоеЗначение, "Число");
+
+ ФактическаяДлина = ДлинаПроверяемогоЗначения();
+ Результат = ФактическаяДлина < ОжидаемоеЗначение;
+
+ Сообщение = СтрШаблон("имеет длину (размер) меньше `%1`", ОжидаемоеЗначение);
+ ОбработатьРезультатСравнения(Результат, Сообщение, Ложь, ФактическаяДлина, ОжидаемоеЗначение);
+ Возврат ЮТУтверждения;
+
+КонецФункции
+
// НеИмеетДлину
// Проверяет установленное значение Контекста (или его свойство) на длину или размер коллекции, которые не должны совпадать с указанным значением
// Проверка поддерживается для следующих типов проверяемого значения:
@@ -748,6 +821,7 @@
Контекст = Новый Структура;
Контекст.Вставить("ПроверяемоеЗначение", Неопределено);
+ Контекст.Вставить("ПредставлениеПроверяемогоЗначения", Неопределено);
Контекст.Вставить("ПрефиксОшибки", "");
Контекст.Вставить("ИмяМетода", "");
Контекст.Вставить("ИмяСвойства", "");
@@ -1126,9 +1200,7 @@
КонецПроцедуры
-Процедура ПроверитьДлину(ОжидаемоеЗначение, Реверс)
-
- ПроверитьТипЗначения(ОжидаемоеЗначение, "Число");
+Функция ДлинаПроверяемогоЗначения()
Попытка
ПроверяемоеЗначение = ПроверяемоеЗначение();
@@ -1142,11 +1214,16 @@
ЮТРегистрацияОшибок.СгенерироватьОшибкуВыполнения(ТекстОшибки);
КонецЕсли;
- Попытка
- Результат = ФактическаяДлина = ОжидаемоеЗначение;
- Исключение
- ЮТРегистрацияОшибок.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке());
- КонецПопытки;
+ Возврат ФактическаяДлина;
+
+КонецФункции
+
+Процедура ПроверитьДлину(ОжидаемоеЗначение, Реверс)
+
+ ПроверитьТипЗначения(ОжидаемоеЗначение, "Число");
+
+ ФактическаяДлина = ДлинаПроверяемогоЗначения();
+ Результат = ФактическаяДлина = ОжидаемоеЗначение;
Сообщение = СтрШаблон("имеет длину (размер) `%1`", ОжидаемоеЗначение);
ОбработатьРезультатСравнения(Результат, Сообщение, Реверс, ФактическаяДлина, ОжидаемоеЗначение);
diff --git a/exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl
index 00fe3a55..d5ae0ec7 100644
--- a/exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТЧитатель/Module.bsl
@@ -90,7 +90,7 @@
КонецЕсли;
КонецЕсли;
-
+
Данные = ЮТТесты.СценарииМодуля();
Если Ошибка <> Неопределено Тогда
diff --git a/exts/yaxunit/src/Configuration/Configuration.mdo b/exts/yaxunit/src/Configuration/Configuration.mdo
index 0954ec29..8f662eae 100644
--- a/exts/yaxunit/src/Configuration/Configuration.mdo
+++ b/exts/yaxunit/src/Configuration/Configuration.mdo
@@ -30,11 +30,17 @@
ru
Subsystem.ЮТФункциональность
- CommonModule.ОМ_ЮТ
+ CommonModule.Мокито
+ CommonModule.МокитоОбучение
+ CommonModule.МокитоПроверки
+ CommonModule.МокитоСлужебный
+ CommonModule.ОМ_Мокито
+ CommonModule.ОМ_МокитоОбучение
CommonModule.ОМ_ЮТИсполнитель
CommonModule.ОМ_ЮТУтверждения
CommonModule.ОМ_ЮТФильтрация
CommonModule.ОМ_ЮТЧитатель
+ CommonModule.РаботаСHTTP
CommonModule.ЮТ
CommonModule.ЮТИсполнитель
CommonModule.ЮТИсполнительСервер
@@ -59,4 +65,7 @@
CommonModule.ЮТФильтрация
CommonModule.ЮТЧитатель
CommonModule.ЮТЧитательСервер
+ Catalog.ДополнительныеПараметрыЖурналаДействийПользователя
+ Catalog.ИсточникиДанных
+ Document.ЧекККМ
diff --git a/exts/yaxunit/src/Documents/ЧекККМ/ObjectModule.bsl b/exts/yaxunit/src/Documents/ЧекККМ/ObjectModule.bsl
new file mode 100644
index 00000000..8664e999
--- /dev/null
+++ b/exts/yaxunit/src/Documents/ЧекККМ/ObjectModule.bsl
@@ -0,0 +1,31 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+&Вместо("ОбработкаПроведения")
+Процедура ЮТОбработкаПроведения(Отказ, РежимПроведения)
+
+ ПараметрыМетода = Мокито.МассивПараметров(Отказ, РежимПроведения);
+
+ ПрерватьВыполнение = Ложь;
+ Мокито.АнализВызова(ЭтотОбъект, "ОбработкаПроведения", ПараметрыМетода, ПрерватьВыполнение);
+
+ Если НЕ ПрерватьВыполнение Тогда
+ ПродолжитьВызов(Отказ, РежимПроведения);
+ КонецЕсли;
+
+КонецПроцедуры
diff --git a/exts/yaxunit/src/Documents/ЧекККМ/ЧекККМ.mdo b/exts/yaxunit/src/Documents/ЧекККМ/ЧекККМ.mdo
new file mode 100644
index 00000000..1972d0ea
--- /dev/null
+++ b/exts/yaxunit/src/Documents/ЧекККМ/ЧекККМ.mdo
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+ ЧекККМ
+ Adopted
+
+ Extended
+
+
diff --git a/exts/yaxunit/src/Subsystems/ЮТФункциональность/Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo b/exts/yaxunit/src/Subsystems/ЮТФункциональность/Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo
index d534d332..f83fad12 100644
--- a/exts/yaxunit/src/Subsystems/ЮТФункциональность/Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo
+++ b/exts/yaxunit/src/Subsystems/ЮТФункциональность/Subsystems/ЮТОбработчикиСобытий/ЮТОбработчикиСобытий.mdo
@@ -7,6 +7,7 @@
true
true
+ CommonModule.МокитоСлужебный
CommonModule.ЮТТестовыеДанные
CommonModule.ЮТУтверждения
Subsystem.ЮТФункциональность
diff --git a/ТестыПример/DT-INF/PROJECT.PMF b/ТестыПример/DT-INF/PROJECT.PMF
index 3b39ff43..16b36590 100644
--- a/ТестыПример/DT-INF/PROJECT.PMF
+++ b/ТестыПример/DT-INF/PROJECT.PMF
@@ -1,3 +1,3 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.10
-Base-Project: configuration
+Base-Project: BSP
diff --git a/ТестыПример/src/Configuration/Configuration.mdo b/ТестыПример/src/Configuration/Configuration.mdo
index e7133a26..213ea7fb 100644
--- a/ТестыПример/src/Configuration/Configuration.mdo
+++ b/ТестыПример/src/Configuration/Configuration.mdo
@@ -6,9 +6,7 @@
Tests
Adopted
-
- Checked
-
+