mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-02-10 19:41:26 +02:00
parent
7bbd8d8a67
commit
0a8b50a470
@ -1,6 +1,7 @@
|
||||
---
|
||||
tags: [Getting started, Mock]
|
||||
---
|
||||
|
||||
# Мокито
|
||||
|
||||
Мокито - модуль созданный по образу популярного java-фреймворка для тестирования [Mockito](https://site.mockito.org/). Расширяет возможности тестирования, позволяет легко менять логику работы системы подменяя результаты работы методов, отключая какие-либо алгоритмы и проверки.
|
||||
|
@ -1,24 +1,55 @@
|
||||
# Предикаты
|
||||
|
||||
Механизм предикатов позволяет:
|
||||
|
||||
* Формировать наборы утверждений и передавать в методы проверки
|
||||
* Методы для формирования предикатов имеют такой же синтаксис как и утверждения для тестов (`ЮТест.ОжидаетЧто()`)
|
||||
* Проверять элементы коллекций на соответствие утверждениям
|
||||
|
||||
Например
|
||||
Предикаты это утверждения, которые вы можете передавать в качестве параметров.
|
||||
Они расширяют и унифицируют функциональность тестового движка.
|
||||
|
||||
```bsl
|
||||
ЮТест.ОжидаетЧто(Коллекция)
|
||||
.ЛюбойЭлементСоответствуетПредикату(Ютест.Предикат()
|
||||
.Реквизит("Число").Равно(2)); // Проверят, что в коллекции есть элементы с реквизитом `Число`, которое равно `2`
|
||||
|
||||
ЮТест.ОжидаетЧто(Коллекция)
|
||||
.КаждыйЭлементСоответствуетПредикату(Ютест.Предикат()
|
||||
.Заполнено().ИмеетТип("Массив")); // Проверят, что каждый элемент коллекции это заполненный массив
|
||||
Процедура АктуализацияУведомлений() Экспорт
|
||||
|
||||
ИмяРегистра = "РегистрСведений.ОповещенияПользователя";
|
||||
Объект = ТестовыеДанные.Объект();
|
||||
|
||||
УсловиеУведомления = ЮТест.Предикат()
|
||||
.Реквизит("Источник").Равно(Объект)
|
||||
.Реквизит("ТипОповещения").Равно(Справочники.ТипыОповещенийПользователя.Уведомление1)
|
||||
.Получить();
|
||||
|
||||
ЮТест.ОжидаетЧтоТаблицаБазы(ИмяРегистра)
|
||||
.НеСодержитЗаписи(УсловиеУведомления);
|
||||
|
||||
УведомленияВызовСервера.АктуализацияУведомлений();
|
||||
|
||||
ЮТест.ОжидаетЧтоТаблицаБазы(ИмяРегистра)
|
||||
.СодержитЗаписи(УсловиеУведомления);
|
||||
|
||||
ДанныеУведомления = ЮТЗапросы.Запись(ИмяРегистра, УсловиеУведомления);
|
||||
|
||||
ЮТест.ОжидаетЧто(ДанныеУведомления)
|
||||
.Свойство("Прочитано").ЭтоЛожь()
|
||||
.Свойство("Пользователь").Равно(Справочники.ГруппыОповещенийПользователей.Инженер);
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
## Планы развития
|
||||
Механизм предикатов:
|
||||
|
||||
* позволяет формировать наборы утверждений и передавать их в качества параметров;
|
||||
* используется для проверки коллекций, записей базы и так далее;
|
||||
* построен по модели текучих выражения и имеет схожий с базовыми утверждениями синтаксис (`ЮТест.ОжидаетЧто()`);
|
||||
|
||||
## Примеры использования
|
||||
|
||||
* Проверка коллекции
|
||||
|
||||
```bsl
|
||||
ЮТест.ОжидаетЧто(Коллекция)
|
||||
.ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат()
|
||||
.Реквизит("Число").Равно(2)); // Проверят, что в коллекции есть элементы с реквизитом `Число`, которое равно `2`
|
||||
|
||||
ЮТест.ОжидаетЧто(Коллекция)
|
||||
.КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
|
||||
.Заполнено().ИмеетТип("Массив")); // Проверят, что каждый элемент коллекции это заполненный массив
|
||||
```
|
||||
|
||||
* Описания параметров метода при мокировании
|
||||
|
||||
@ -26,11 +57,11 @@
|
||||
|
||||
```bsl
|
||||
Мокито.Обучение(Модуль)
|
||||
.Когда(Модуль.Посчитать(Мокито.Предикат()
|
||||
.Когда(Модуль.Посчитать(ЮТест.Предикат()
|
||||
.Реквизит("Оператор").Равно("Сложить")))
|
||||
.ВернутьРезультат(Результат1)
|
||||
|
||||
.Когда(Модуль.Посчитать(Мокито.Предикат()
|
||||
.Когда(Модуль.Посчитать(ЮТест.Предикат()
|
||||
.Реквизит("Оператор").Равно("Вычесть")))
|
||||
.ВернутьРезультат(Результат2);
|
||||
```
|
||||
@ -45,4 +76,57 @@
|
||||
);
|
||||
```
|
||||
|
||||
* Перевести обычные утверждения на предикаты
|
||||
* Получение записей из базы
|
||||
|
||||
```bsl
|
||||
ДанныеТовара = ЮТЗапросы.Запись("Справочник.Товары", ЮТест.Предикат()
|
||||
.Реквизит("Наименование").Равно("Товар 1")
|
||||
.Реквизит("Ссылка").НеРавно(Исключение));
|
||||
```
|
||||
|
||||
## Особенности
|
||||
|
||||
### Особенности контекста
|
||||
|
||||
Предикаты как и большинство механизмов построены на текучих выражениях с сохранением состояния в глобальном контексте.
|
||||
|
||||
Это приводит к тому, что вы не можете сразу использовать несколько предикатов, например
|
||||
|
||||
```bsl
|
||||
Мокито.Обучение(Модуль)
|
||||
.Когда(Модуль.СделатьЧтоТо(
|
||||
ЮТест.Предикат().ИмеетТип("Строка"),
|
||||
ЮТест.Предикат().ИмеетТип("Число")))
|
||||
.ВернутьРезультат(Результат1);
|
||||
```
|
||||
|
||||
В этом примере 1С сначала вычислит выражения для всех параметров, а потом передаст их в метод и мы получим для обоих параметров один и тот же предикат, ожидающий тип `Число`.
|
||||
Потому что состояние первого предиката будет заменено вторым. Для обхода этой проблемы можно использовать метод `Получить`, который возвращает текущее состояние.
|
||||
|
||||
```bsl
|
||||
Мокито.Обучение(Модуль)
|
||||
.Когда(Модуль.СделатьЧтоТо(
|
||||
ЮТест.Предикат().ИмеетТип("Строка").Получить(),
|
||||
ЮТест.Предикат().ИмеетТип("Число")))
|
||||
.ВернутьРезультат(Результат1);
|
||||
```
|
||||
|
||||
Такая же история при сохранение предикатов в переменные.
|
||||
|
||||
```bsl
|
||||
ПроверкаСтрока = ЮТест.Предикат().ИмеетТип("Строка");
|
||||
ПроверкаЧисло = ЮТест.Предикат().ИмеетТип("Число");
|
||||
```
|
||||
|
||||
`ПроверкаСтрока` и `ПроверкаЧисло` будут равны и содержать одинаковые условия. Проблему также можно обойти используя метод `Получить`.
|
||||
|
||||
```bsl
|
||||
ПроверкаСтрока = ЮТест.Предикат().ИмеетТип("Строка").Получить();
|
||||
ПроверкаЧисло = ЮТест.Предикат().ИмеетТип("Число").Получить();
|
||||
```
|
||||
|
||||
### Особенности реализации
|
||||
|
||||
Сам модуль предикатов используется только для формирования утверждений/условий.
|
||||
|
||||
Реализацией проверок и формированием условий занимаются другие модули и возможна ситуация, когда некоторые предикаты еще не реализованы или не поддерживаются каким-либо механизмом. Например, проверка заполненности не поддерживается запросами.
|
@ -1,6 +1,7 @@
|
||||
---
|
||||
tags: [Getting started]
|
||||
---
|
||||
|
||||
# Регистрация тестовых методов (ЮТТесты)
|
||||
|
||||
Кроме того, чтобы написать тестовые сценарии, разработчик должен зарегистрировать их в движке.
|
||||
|
Loading…
x
Reference in New Issue
Block a user