Перейти к основному содержимому

Примеры

Мокито — это мощный инструмент для мокирования методов в 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С. Благодаря ему можно легко подменять результаты, отключать выполнение, собирать статистику и тестировать сложные сценарии. Используя примеры из этой статьи, вы сможете эффективно применять Мокито в своих тестах.