Примеры
Мокито — это мощный инструмент для мокирования методов в 1С, который позволяет управлять поведением системы во время тестирования. В этой статье мы рассмотрим все основные возможности Мокито с примерами и пояснениями.
Больше примеров в тестах тут, тут и тут. Причем всегда актуальных.
Подмена метода общего модуля, должен вернуть нужный результат
Пример
// Настройка мокирования
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Когда("ОтправитьЗапрос").Вернуть(Новый HTTPСервисОтвет(200))
.Прогон();
// Тестовый прогон
Результат = ОбщийМодуль.РаботаСHTTP.ОтправитьЗапрос("https://example.com");
// Проверка
ЮТест.ОжидаетЧто(Результат.КодСостояния).Равно(200);
Пояснение:
Метод ОтправитьЗапрос
общего модуля РаботаСHTTP
возвращает заранее заданный ответ (HTTP-код 200).
Выброс исключения метода документа
Пример:
// Настройка мокирования
Мокито.Обучение(Документы.ПриходТовара)
.Когда("ОбработкаПроведения").ВыброситьИсключение("Ошибка проведения")
.Прогон();
// Тестовый прогон
Документ = Документы.ПриходТовара.СоздатьДокумент();
ЮТест.ОжидаетЧто(Документ)
.Метод("Записать").Параметр(РежимЗаписиДокумента.Проведение)
.ВыбрасываетИсключение("Ошибка проведения");
Пояснение:
Метод ОбработкаПроведения
документа ПриходТовара
выбрасывает исключение при вызове. Для проверки исключений используется метод ВыбрасываетИсключение
с указанием ожидаемого текста исключения.
Пропуск метода справочника
Пример:
// Настройка мокирования
Мокито.Обучение(Справочники.Номенклатура)
.Когда("ОбновитьЦену").Пропустить()
.Прогон();
// Тестовый прогон
Справочники.Номенклатура.ОбновитьЦену("Товар1", 100);
// Проверка
ЮТест.ОжидаетЧто(Справочники.Номенклатура.ПолучитьЦену("Товар1")).Равно(0);
Пояснение:
Метод ОбновитьЦену
справочника Номенклатура
пропускается, и его выполнение не влияет на данные.
Обучение по ссылке на объект
Пример:
// Настройка мокирования
Ссылка = Справочники.Номенклатура.НайтиПоНаименованию("Товар1");
Мокито.Обучение(Ссылка)
.Когда("ПолучитьЦену").Вернуть(100)
.Прогон();
// Тестовый прогон
Цена = Ссылка.ПолучитьОбъект().ПолучитьЦену();
// Проверка
ЮТест.ОжидаетЧто(Цена).Равно(100);
Пояснение:
Метод ПолучитьЦену
мокируется для объекта, указанного по ссылке.
Подмена результата метода менеджера
Пример:
// Настройка мокирования
Мокито.Обучение(Документы.ПриходТовара)
.Когда("ПолучитьКоличествоТоваров").Вернуть(10)
.Прогон();
// Тестовый прогон
Количество = Документы.ПриходТовара.ПолучитьКоличествоТоваров();
// Проверка
ЮТест.ОжидаетЧто(Количество).Равно(10);
Пояснение:
Метод ПолучитьКоличествоТоваров
модуля менеджера документа ПриходТовара
возвращает заранее заданное значение.
Подмена результата метода отчета
Пример:
// Настройка мокирования
Мокито.Обучение(Отчеты.ОСВ)
.Когда("СформироватьОтчет").Вернуть(Новый ТабличныйДокумент)
.Прогон();
// Тестовый прогон
Отчет = Отчеты.ОСВ.СоздатьОтчет();
Результат = Отчет.СформироватьОтчет();
// Проверка
ЮТест.ОжидаетЧто(Результат).ИмеетТип("ТабличныйДокумент");
Пояснение:
Метод СформироватьОтчет
отчета ОСВ
возвращает пустой табличный документ.
Подмена результата метода обработки
Пример:
// Настройка мокирования
Мокито.Обучение(Обработки.УправлениеЗаказами)
.Когда("ОбработатьЗаказ").Вернуть(Истина)
.Прогон();
// Тестовый прогон
Результат = Обработки.УправлениеЗаказами.ОбработатьЗаказ(123);
// Проверка
ЮТест.ОжидаетЧто(Результат).Равно(Истина);
Пояснение:
Метод ОбработатьЗаказ
обработки УправлениеЗаказами
возвращает заранее заданное значение.
Разные варианты условий на параметры
Условие по конкретным значениям
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров("https://example.com", Новый Структура("id", 123)))
.Вернуть(Новый HTTPСервисОтвет(200))
.Прогон();
Условия с использованием ЛюбойПараметр
, ЧисловойПараметр
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров(Мокито.ЛюбойПараметр(), Мокито.ЧисловойПараметр()))
.Вернуть(Новый HTTPСервисОтвет(200))
.Прогон();
Условия, когда указаны не все параметры метода
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров("https://example.com"))
.Вернуть(Новый HTTPСервисОтвет(200))
.Прогон();
Условия с использованием предикатов
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров(Мокито.ЛюбойПараметр(), ЮТест.Предикат().ИмеетСвойство("id")))
.Вернуть(Новый HTTPСервисОтвет(200))
.Прогон();
Несколько условий в одном кейсе
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Когда("ОтправитьЗапрос").ВыброситьИсключение("Ошибка сети")
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров("https://example.com", Новый Структура("id", 123)))
.Вернуть(Новый HTTPСервисОтвет(200))
.Прогон();
Цепочка вызовов
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Когда("ОтправитьЗапрос")
.Вернуть(Новый HTTPСервисОтвет(200))
.Вернуть(Новый HTTPСервисОтвет(404))
.Вернуть(Новый HTTPСервисОтвет(500))
.Прогон();
Пример мокирования нескольких методов объекта
Пример:
// Настройка мокирования
Мокито.Обучение(Документы.ПриходТовара)
.Когда("ОбработкаПроведения").Пропустить()
.Когда("ПолучитьКоличествоТоваров").Вернуть(10)
.Прогон();
// Тестовый прогон
Документ = Документы.ПриходТовара.СоздатьДокумент();
Количество = Документ.ПолучитьКоличествоТоваров();
Документ.Записать(РежимЗаписиДокумента.Проведение);
// Проверка
ЮТест.ОжидаетЧто(Количество).Равно(10);
ЮТест.ОжидаетЧто(Документ.Проведен).Равно(Ложь);
Пояснение:
Методы ОбработкаПроведения
и ПолучитьКоличествоТоваров
мокируются для документа ПриходТовара
.
Пример мокирования методов нескольких объектов
Пример:
// Настройка мокирования
Мокито.Обучение(Документы.ПриходТовара)
.Когда("ОбработкаПроведения").Пропустить()
.Прогон();
Мокито.Обучение(Справочники.Номенклатура)
.Когда("ПолучитьЦену").Вернуть(100)
.Прогон();
// Тестовый прогон
Документ = Документы.ПриходТовара.СоздатьДокумент();
Цена = Справочники.Номенклатура.ПолучитьЦену("Товар1");
Документ.Записать(РежимЗаписиДокумента.Проведение);
// Проверка
ЮТест.ОжидаетЧто(Цена).Равно(100);
ЮТест.ОжидаетЧто(Документ.Проведен).Равно(Ложь);
Пояснение:
Методы ОбработкаПроведения
документа ПриходТовара
и ПолучитьЦену
справочника Номенклатура
мокируются одновременно.
Наблюдение
Пример:
// Настройка мокирования
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Наблюдать("ОтправитьЗапрос")
.Прогон();
// Тестовый прогон
ОбщийМодуль.РаботаСHTTP.ОтправитьЗапрос("https://example.com");
// Проверка
Мокито.Проверить(ОбщийМодуль.РаботаСHTTP)
.КоличествоВызовов("ОтправитьЗапрос")
.Равно(1);
Пояснение:
Метод ОтправитьЗапрос
наблюдается, и собирается статистика по его вызовам.
Анализ статистики вызовов
Пример:
// Настройка мокирования
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP)
.Наблюдать("ОтправитьЗапрос")
.Прогон();
// Тестовый прогон
ОбщийМодуль.РаботаСHTTP.ОтправитьЗапрос("https://example.com", Новый Структура("id", 123));
ОбщийМодуль.РаботаСHTTP.ОтправитьЗапрос("https://example.com", Новый Структура("id", 456));
// Проверка
Вызовы = Мокито.Проверить(ОбщийМодуль.РаботаСHTTP).Вызовы("ОтправитьЗапрос");
ЮТест.ОжидаетЧто(Вызовы.Количество()).Равно(2);
ЮТест.ОжидаетЧто(Вызовы[0].Параметры[1].id).Равно(123);
ЮТест.ОжидаетЧто(Вызовы[1].Параметры[1].id).Равно(456);
Пояснение:
Статистика по вызовам метода ОтправитьЗапрос
анализируется, чтобы убедиться, что метод вызывался с правильными параметрами.
Заключение
Мокито предоставляет широкие возможности для управления поведением методов в 1С. Благодаря ему можно легко подменять результаты, отключать выполнение, собирать статистику и тестировать сложные сценарии. Используя примеры из этой статьи, вы сможете эффективно применять Мокито в своих тестах.