1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-20 18:48:36 +02:00
yaxunit/docs/assertions.md

87 lines
6.3 KiB
Markdown
Raw Normal View History

2020-10-12 10:00:55 +03:00
# Утверждения
2022-10-04 16:39:36 +03:00
Каждый тестовый сценарий должен проверить результат работы тестируемого метода, будь то функция или процедура.
2020-10-12 10:00:55 +03:00
2022-10-04 16:39:36 +03:00
Для написания таких проверок реализован механизм утверждений, позволяющий в лаконичной форме описать свои ожидания, требования к результату.
2020-10-12 10:00:55 +03:00
2022-10-04 16:39:36 +03:00
Работу с утверждениями реализует модуль `ЮТУтверждения`.
Доступ к утверждениям обеспечивает метод `ЮТест.ОжидаетЧто`, который возвращает инициализированный модуль `ЮТУтверждения`
Особенности реализации утверждений:
* Реализованы по модели [текучих выражений](https://ru.wikipedia.org/wiki/Fluent_interface), с целью повышения удобства и читаемости тестов
2020-10-12 10:00:55 +03:00
```bsl
2022-10-04 16:39:36 +03:00
ЮТест.ОжидаетЧто(Контекст)
.ИмеетТип("Структура")
2020-10-12 10:00:55 +03:00
.Свойство("ПрефиксОшибки").Равно("Контекст метода с параметрами")
2022-10-04 16:39:36 +03:00
.Свойство("ИмяМетода").Заполнено().Равно("МетодБезИсключение")
.Свойство("ПараметрыМетода").ИмеетТип("Массив").ИмеетДлину(1);
2020-10-12 10:00:55 +03:00
```
2022-10-04 16:39:36 +03:00
* Реализован минимально необходимый набор проверок
* Большая часть методов - это сравнения фактического и ожидаемого результатов, но есть несколько методов настройки
2020-10-12 10:00:55 +03:00
* `Что` - устанавливает проверяемый объект. Все дальнейшие проверки будут выполняется с этим объектом
2022-10-04 16:39:36 +03:00
* `Метод` - устанавливает имя и параметры проверяемого метода. Для проверки методов имеются утверждения `ВыбрасываетИсключение` и `НеВыбрасываетИсключение`
2020-10-12 10:00:55 +03:00
* `Параметр` - добавляет параметр метода. Создан для удобства установки параметров проверяемого метода
* `Свойство` - устанавливает проверяемое свойство и проверяет его наличие.
* Можно указывать вложенные свойства через точку, например, `Свойство("Контекст.ИмяМетода")`.
2022-10-04 16:39:36 +03:00
* Также, первая проверка, вызванная после этого метода, будет относиться к свойству объекта.
Например, `ЮТест.ОжидаетЧто(Контекст).Свойство("ИмяМетода").Равно("МетодБезИсключение")` эквивалентно `Контекст.ИмяМетода = "МетодБезИсключение"`
* Все методы имеют параметр `ОписаниеПроверки` для описания конкретной проверки
Примеры:
1. Базовые проверки
```bsl
ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
.ИмеетТип("Число") // Проверим тип
.Заполнено() // Заполненность проверяемого значения
.Больше(0) // Сравним с нулем
.Равно(5); // Проверим ожидаемый результат
```
2. Проверка сложного объекта
```bsl
Объект = ЮТОбщий.ЗначениеВМассиве("1", "2", "3");
ЮТУтверждения.Что(Объект, "Проверка элементов массива")
.Содержит("1")
.НеСодержит(1)
.Элемент(0).Равно("1")
.Элемент(1).Равно("2")
.Элемент(-1).Равно("3")
.Свойство("[00]").Равно("1")
.Свойство("[1]").Равно("2")
.Свойство("[-1]").Равно("3")
.НетСвойства(3)
.НетСвойства("[3]");
Объект.Добавить(Новый Структура("Первый, Второй", 1, ЮТОбщий.ЗначениеВМассиве(2)));
ЮТУтверждения.Что(Объект, "Проверка свойства элемента массива")
.Свойство("[3].Первый").Равно(1)
.Свойство("[3].Второй[-1]").Равно(2)
.Свойство("[3].Второй[0]").Равно(2)
```
3. Проверка вызова метода
2020-10-12 10:00:55 +03:00
2022-10-04 16:39:36 +03:00
```bsl
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодБезИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение"))
.НеВыбрасываетИсключение()
.НеВыбрасываетИсключение("Ожидаемое исключение");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение", 2))
.ВыбрасываетИсключение("Слишком много фактических параметров");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение"))
.ВыбрасываетИсключение("Исключение");
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
.Метод("МетодБезИсключение")
.ВыбрасываетИсключение("Недостаточно фактических параметров");
```