-
Notifications
You must be signed in to change notification settings - Fork 54
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #500 from bia-technologies/feature/432
432 / Обновленная документация по мокито
- Loading branch information
Showing
21 changed files
with
4,538 additions
and
1,501 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,327 @@ | ||
--- | ||
tags: [Мокирование] | ||
toc_max_heading_level: 2 | ||
--- | ||
|
||
# Примеры | ||
|
||
Мокито — это мощный инструмент для мокирования методов в 1С, который позволяет управлять поведением системы во время тестирования. В этой статье мы рассмотрим все основные возможности Мокито с примерами и пояснениями. | ||
|
||
Больше примеров в тестах [тут](https://github.com/bia-technologies/yaxunit/blob/develop/tests/src/CommonModules/ОМ_Мокито/Module.bsl), [тут](https://github.com/bia-technologies/yaxunit/blob/develop/tests/src/CommonModules/ОМ_МокитоОбучение/Module.bsl) и [тут](https://github.com/bia-technologies/yaxunit/blob/develop/tests/src/CommonModules/ОМ_МокитоСлужебный/Module.bsl). Причем всегда актуальных. | ||
|
||
--- | ||
|
||
## Подмена метода общего модуля, должен вернуть нужный результат | ||
|
||
### Пример | ||
|
||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Когда("ОтправитьЗапрос").Вернуть(Новый HTTPСервисОтвет(200)) | ||
.Прогон(); | ||
// Тестовый прогон | ||
Результат = ОбщийМодуль.РаботаСHTTP.ОтправитьЗапрос("https://example.com"); | ||
// Проверка | ||
ЮТест.ОжидаетЧто(Результат.КодСостояния).Равно(200); | ||
``` | ||
|
||
### Пояснение: | ||
Метод `ОтправитьЗапрос` общего модуля `РаботаСHTTP` возвращает заранее заданный ответ (HTTP-код 200). | ||
|
||
--- | ||
|
||
## Выброс исключения метода документа | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(Документы.ПриходТовара) | ||
.Когда("ОбработкаПроведения").ВыброситьИсключение("Ошибка проведения") | ||
.Прогон(); | ||
// Тестовый прогон | ||
Документ = Документы.ПриходТовара.СоздатьДокумент(); | ||
ЮТест.ОжидаетЧто(() -> Документ.Записать(РежимЗаписиДокумента.Проведение)) | ||
.ВыбрасываетИсключение("Ошибка проведения"); | ||
``` | ||
|
||
### Пояснение: | ||
Метод `ОбработкаПроведения` документа `ПриходТовара` выбрасывает исключение при вызове. | ||
|
||
--- | ||
|
||
## Пропуск метода справочника | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(Справочники.Номенклатура) | ||
.Когда("ОбновитьЦену").Пропустить() | ||
.Прогон(); | ||
// Тестовый прогон | ||
Справочники.Номенклатура.ОбновитьЦену("Товар1", 100); | ||
// Проверка | ||
ЮТест.ОжидаетЧто(Справочники.Номенклатура.ПолучитьЦену("Товар1")).Равно(0); | ||
``` | ||
|
||
### Пояснение: | ||
Метод `ОбновитьЦену` справочника `Номенклатура` пропускается, и его выполнение не влияет на данные. | ||
|
||
--- | ||
|
||
## Обучение по ссылке на объект | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Ссылка = Справочники.Номенклатура.НайтиПоНаименованию("Товар1"); | ||
Мокито.Обучение(Ссылка) | ||
.Когда("ПолучитьЦену").Вернуть(100) | ||
.Прогон(); | ||
// Тестовый прогон | ||
Цена = Ссылка.ПолучитьОбъект().ПолучитьЦену(); | ||
// Проверка | ||
ЮТест.ОжидаетЧто(Цена).Равно(100); | ||
``` | ||
|
||
### Пояснение: | ||
Метод `ПолучитьЦену` мокируется для объекта, указанного по ссылке. | ||
|
||
--- | ||
|
||
## Подмена результата метода менеджера | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(Документы.ПриходТовара) | ||
.Когда("ПолучитьКоличествоТоваров").Вернуть(10) | ||
.Прогон(); | ||
// Тестовый прогон | ||
Количество = Документы.ПриходТовара.ПолучитьКоличествоТоваров(); | ||
// Проверка | ||
ЮТест.ОжидаетЧто(Количество).Равно(10); | ||
``` | ||
|
||
### Пояснение: | ||
Метод `ПолучитьКоличествоТоваров` модуля менеджера документа `ПриходТовара` возвращает заранее заданное значение. | ||
|
||
--- | ||
|
||
## Подмена результата метода отчета | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(Отчеты.ОСВ) | ||
.Когда("СформироватьОтчет").Вернуть(Новый ТабличныйДокумент) | ||
.Прогон(); | ||
// Тестовый прогон | ||
Отчет = Отчеты.ОСВ.СоздатьОтчет(); | ||
Результат = Отчет.СформироватьОтчет(); | ||
// Проверка | ||
ЮТест.ОжидаетЧто(Результат).ИмеетТип("ТабличныйДокумент"); | ||
``` | ||
|
||
### Пояснение: | ||
Метод `СформироватьОтчет` отчета `ОСВ` возвращает пустой табличный документ. | ||
|
||
--- | ||
|
||
## Подмена результата метода обработки | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(Обработки.УправлениеЗаказами) | ||
.Когда("ОбработатьЗаказ").Вернуть(Истина) | ||
.Прогон(); | ||
// Тестовый прогон | ||
Результат = Обработки.УправлениеЗаказами.ОбработатьЗаказ(123); | ||
// Проверка | ||
ЮТест.ОжидаетЧто(Результат).Равно(Истина); | ||
``` | ||
|
||
### Пояснение: | ||
Метод `ОбработатьЗаказ` обработки `УправлениеЗаказами` возвращает заранее заданное значение. | ||
|
||
--- | ||
|
||
## Разные варианты условий на параметры | ||
|
||
### Условие по конкретным значениям | ||
|
||
```bsl | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров("https://example.com", Новый Структура("id", 123))) | ||
.Вернуть(Новый HTTPСервисОтвет(200)) | ||
.Прогон(); | ||
``` | ||
|
||
### Условия с использованием `ЛюбойПараметр`, `ЧисловойПараметр` | ||
|
||
```bsl | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров(Мокито.ЛюбойПараметр(), Мокито.ЧисловойПараметр())) | ||
.Вернуть(Новый HTTPСервисОтвет(200)) | ||
.Прогон(); | ||
``` | ||
|
||
### Условия, когда указаны не все параметры метода | ||
|
||
```bsl | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров("https://example.com")) | ||
.Вернуть(Новый HTTPСервисОтвет(200)) | ||
.Прогон(); | ||
``` | ||
|
||
### Условия с использованием предикатов | ||
|
||
```bsl | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров(Мокито.ЛюбойПараметр(), ЮТест.Предикат().ИмеетСвойство("id"))) | ||
.Вернуть(Новый HTTPСервисОтвет(200)) | ||
.Прогон(); | ||
``` | ||
|
||
### Несколько условий в одном кейсе | ||
|
||
```bsl | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Когда("ОтправитьЗапрос").ВыброситьИсключение("Ошибка сети") | ||
.Когда("ОтправитьЗапрос", Мокито.МассивПараметров("https://example.com", Новый Структура("id", 123))) | ||
.Вернуть(Новый HTTPСервисОтвет(200)) | ||
.Прогон(); | ||
``` | ||
|
||
### Цепочка вызовов | ||
|
||
```bsl | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Когда("ОтправитьЗапрос") | ||
.Вернуть(Новый HTTPСервисОтвет(200)) | ||
.Вернуть(Новый HTTPСервисОтвет(404)) | ||
.Вернуть(Новый HTTPСервисОтвет(500)) | ||
.Прогон(); | ||
``` | ||
|
||
--- | ||
|
||
## Пример мокирования нескольких методов объекта | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(Документы.ПриходТовара) | ||
.Когда("ОбработкаПроведения").Пропустить() | ||
.Когда("ПолучитьКоличествоТоваров").Вернуть(10) | ||
.Прогон(); | ||
// Тестовый прогон | ||
Документ = Документы.ПриходТовара.СоздатьДокумент(); | ||
Количество = Документ.ПолучитьКоличествоТоваров(); | ||
Документ.Записать(РежимЗаписиДокумента.Проведение); | ||
// Проверка | ||
ЮТест.ОжидаетЧто(Количество).Равно(10); | ||
ЮТест.ОжидаетЧто(Документ.Проведен).Равно(Ложь); | ||
``` | ||
|
||
### Пояснение: | ||
Методы `ОбработкаПроведения` и `ПолучитьКоличествоТоваров` мокируются для документа `ПриходТовара`. | ||
|
||
--- | ||
|
||
## Пример мокирования методов нескольких объектов | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(Документы.ПриходТовара) | ||
.Когда("ОбработкаПроведения").Пропустить() | ||
.Прогон(); | ||
Мокито.Обучение(Справочники.Номенклатура) | ||
.Когда("ПолучитьЦену").Вернуть(100) | ||
.Прогон(); | ||
// Тестовый прогон | ||
Документ = Документы.ПриходТовара.СоздатьДокумент(); | ||
Цена = Справочники.Номенклатура.ПолучитьЦену("Товар1"); | ||
Документ.Записать(РежимЗаписиДокумента.Проведение); | ||
// Проверка | ||
ЮТест.ОжидаетЧто(Цена).Равно(100); | ||
ЮТест.ОжидаетЧто(Документ.Проведен).Равно(Ложь); | ||
``` | ||
|
||
### Пояснение: | ||
Методы `ОбработкаПроведения` документа `ПриходТовара` и `ПолучитьЦену` справочника `Номенклатура` мокируются одновременно. | ||
|
||
--- | ||
|
||
## Наблюдение | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Наблюдать("ОтправитьЗапрос") | ||
.Прогон(); | ||
// Тестовый прогон | ||
ОбщийМодуль.РаботаСHTTP.ОтправитьЗапрос("https://example.com"); | ||
// Проверка | ||
Мокито.Проверить(ОбщийМодуль.РаботаСHTTP) | ||
.КоличествоВызовов("ОтправитьЗапрос") | ||
.Равно(1); | ||
``` | ||
|
||
### Пояснение: | ||
Метод `ОтправитьЗапрос` наблюдается, и собирается статистика по его вызовам. | ||
|
||
--- | ||
|
||
## Анализ статистики вызовов | ||
|
||
### Пример: | ||
```bsl | ||
// Настройка мокирования | ||
Мокито.Обучение(ОбщийМодуль.РаботаСHTTP) | ||
.Наблюдать("ОтправитьЗапрос") | ||
.Прогон(); | ||
// Тестовый прогон | ||
ОбщийМодуль.РаботаСHTTP.ОтправитьЗапрос("https://example.com", Новый Структура("id", 123)); | ||
ОбщийМодуль.РаботаСHTTP.ОтправитьЗапрос("https://example.com", Новый Структура("id", 456)); | ||
// Проверка | ||
Вызовы = Мокито.Проверить(ОбщийМодуль.РаботаСHTTP).Вызовы("ОтправитьЗапрос"); | ||
ЮТест.ОжидаетЧто(Вызовы.Количество()).Равно(2); | ||
ЮТест.ОжидаетЧто(Вызовы[0].Параметры[1].id).Равно(123); | ||
ЮТест.ОжидаетЧто(Вызовы[1].Параметры[1].id).Равно(456); | ||
``` | ||
|
||
### Пояснение: | ||
Статистика по вызовам метода `ОтправитьЗапрос` анализируется, чтобы убедиться, что метод вызывался с правильными параметрами. | ||
|
||
--- | ||
|
||
## Заключение | ||
|
||
Мокито предоставляет широкие возможности для управления поведением методов в 1С. Благодаря ему можно легко подменять результаты, отключать выполнение, собирать статистику и тестировать сложные сценарии. Используя примеры из этой статьи, вы сможете эффективно применять Мокито в своих тестах. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"label": "Эмуляторы", | ||
"collapsed": false | ||
} |
Oops, something went wrong.