mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-03-20 20:55:11 +02:00
234 lines
19 KiB
Markdown
234 lines
19 KiB
Markdown
---
|
|
tags: [Начало, Утверждения]
|
|
---
|
|
|
|
# Базовые утверждения
|
|
|
|
Утверждения для проверки значений
|
|
|
|
Доступ к утверждениям обеспечивает метод `ЮТест.ОжидаетЧто`, который возвращает инициализированный модуль `ЮТУтверждения`, реализующий работу с утверждениями.
|
|
|
|
:::tip
|
|
Не рекомендуется обращаться к модулю `ЮТУтверждения` напрямую, используйте `ЮТест.ОжидаетЧто`
|
|
:::
|
|
|
|
* Реализован минимально необходимый набор проверок
|
|
* Большая часть методов - это сравнения фактического и ожидаемого результатов, но есть несколько методов настройки
|
|
* `Что` - устанавливает проверяемый объект. Все дальнейшие проверки будут выполняется с этим объектом
|
|
* `Метод` - устанавливает имя и параметры проверяемого метода. Для проверки методов имеются утверждения `ВыбрасываетИсключение` и `НеВыбрасываетИсключение`
|
|
* `Параметр` - добавляет параметр метода. Создан для удобства установки параметров проверяемого метода
|
|
* `Свойство` - устанавливает проверяемое свойство и проверяет его наличие.
|
|
* Последующие проверки, вызванные после этого метода, будут относиться к свойству объекта.
|
|
Например, `ЮТест.ОжидаетЧто(Контекст).Свойство("ИмяМетода").Равно("МетодБезИсключение")` эквивалентно проверке `Контекст.ИмяМетода = "МетодБезИсключение"`
|
|
* Методы работы со свойствами позволяют указывать цепочку свойств (доступ к вложенным свойствам через точку)
|
|
Например:
|
|
* `Свойство("Контекст.ИмяМетода")` - вложенное свойство
|
|
* `ИмеетСвойство("Контекст.ПараметрыМетода[0]")` - элемент вложенной коллекции
|
|
* `НеИмеетСвойства("[0].Свойство")` - свойство элемента коллекции
|
|
* Все методы имеют параметр `ОписаниеПроверки` для описания конкретной проверки
|
|
|
|
## Доступные методы
|
|
|
|
:::tip
|
|
Полный и актуальный набор методов смотрите в описании API
|
|
:::
|
|
|
|
### Сравнение значений
|
|
|
|
* `Равно` - проверка на равенство конкретному значению. Для сериализуемых объектов идет сравнение по значению
|
|
* `НеРавно` - проверка на не равенство конкретному значению. Для сериализуемых объектов идет сравнение по значению
|
|
* `Больше` - проверяемое значение должно быть больше указанного
|
|
* `БольшеИлиРавно` - проверяемое значение должно быть больше или равно указанному
|
|
* `Меньше` - проверяемое значение должно быть меньше указанного
|
|
* `МеньшеИлиРавно` - проверяемое значение должно быть меньше или равно указанному
|
|
* `ЭтоНеопределено` - проверяемое значение должно быть равно `Неопределено`
|
|
* `ЭтоНеНеопределено` - проверяемое значение должно быть не равно `Неопределено`
|
|
* `ЭтоNull` - проверяемое значение должно быть равно `Null`
|
|
* `ЭтоНеNull` - проверяемое значение должно быть не равно `Null`
|
|
* `ЭтоИстина` - проверяемое значение должно быть истиной
|
|
* `ЭтоНеИстина` - проверяемое значение не должно быть истиной
|
|
* `ЭтоЛожь` - проверяемое значение должно быть ложью
|
|
* `ЭтоНеЛожь` - проверяемое значение не должно быть ложью
|
|
|
|
### Проверка заполненности
|
|
|
|
* `Заполнено` - проверяет заполненность значения
|
|
* `НеЗаполнено` - проверяет незаполненность значения
|
|
* `Существует` - проверяет существование (не равно `Null` и `Неопределено`) значения
|
|
* `НеСуществует` - проверяет не существование (не равно `Null` и `Неопределено`) значения
|
|
|
|
### Проверка строк
|
|
|
|
* `ИмеетДлину` - проверяет, что строка имеет указанную длину
|
|
* `ИмеетДлинуБольше` - проверяет, что длин строки больше указанной
|
|
* `ИмеетДлинуМеньше` - проверяет, что длина строки меньше указанной
|
|
* `НеИмеетДлину` - проверяет, что длина строки отличается от указанной
|
|
* `Содержит` - проверяемая строка содержит указанную подстроку
|
|
* `НеСодержит` - проверяемая строка не содержит указанную подстроку
|
|
* `НачинаетсяС` - проверяемая строка начинается с указанной строки
|
|
* `ЗаканчиваетсяНа` - проверяемая строка заканчивается на указанную строку
|
|
* `СодержитСтрокуПоШаблону` - проверяемая строка содержит подстроку, соответствующую регулярному выражению
|
|
* `НеСодержитСтрокуПоШаблону` - проверяемая строка не содержит подстроку, соответствующую регулярному выражению
|
|
|
|
### Проверка вхождения значения в интервал
|
|
|
|
* `МеждуВключаяГраницы` - проверяемое значение находиться в указанному интервале (включая границы)
|
|
* `МеждуИсключаяГраницы` - проверяемое значение находиться в указанному интервале (исключая границы)
|
|
* `МеждуВключаяНачалоГраницы` - проверяемое значение находиться в указанному интервале (включая левую границу и исключая правую)
|
|
* `МеждуВключаяОкончаниеГраницы` - проверяемое значение находиться в указанному интервале (исключая левую границу и включая правую)
|
|
|
|
### Проверка типа значения
|
|
|
|
* `ИмеетТип` - проверяемое значение должно иметь указанный тип
|
|
* `НеИмеетТип` - тип проверяемого значения должен отличаться от указанного
|
|
|
|
### Проверка выполнения метода
|
|
|
|
* `ВыбрасываетИсключение` - проверят, что указанный метод объекта выбрасывает исключение
|
|
* `НеВыбрасываетИсключение` - проверят, что указанный метод объекта не выбрасывает исключение
|
|
|
|
### Проверка наличия свойств/реквизитов
|
|
|
|
* `ИмеетСвойство` - проверяемый объект должен содержать указанное свойство
|
|
* `НеИмеетСвойства` - проверяемый объект не содержит указанное свойство
|
|
* `ИмеетСвойстваРавные` - проверяемый объект должен содержать указанный набор свойств/реквизитов и значений
|
|
|
|
### Проверка коллекции
|
|
|
|
* `ИмеетДлину` - проверяет, что коллекция имеет указанный размер
|
|
* `ИмеетДлинуБольше` - проверяет, что коллекция имеет размер, который больше указанного
|
|
* `ИмеетДлинуМеньше` - проверяет, что коллекция имеет размер, который меньше указанного
|
|
* `НеИмеетДлину` - проверяет, что размер коллекции отличается от указанного
|
|
* `Содержит` - проверяемая коллекция должна содержать указанный элемент
|
|
* `НеСодержит` - проверяемая коллекция не должна содержать указанный элемент
|
|
* `КаждыйЭлементСодержитСвойство` - проверяет, что каждый элемент коллекции имеет указанное свойство
|
|
* `КаждыйЭлементСодержитСвойствоСоЗначением` - проверяет, что каждый элемент коллекции имеет указанное свойство, которое равно ожидаемому значению
|
|
* `ЛюбойЭлементСодержитСвойство` - проверяет, что в коллекции есть элемент содержащий указанное свойство
|
|
* `ЛюбойЭлементСодержитСвойствоСоЗначением` - проверяет, что в коллекции есть элемент содержащий указанное свойство, которое равно ожидаемому значению
|
|
* `КаждыйЭлементСоответствуетПредикату` - проверяет, что элементы коллекции соответствуют переданным условиям
|
|
* `ЛюбойЭлементСоответствуетПредикату` - проверяет, что коллекция содержит элемент, который соответствует переданным условиям
|
|
|
|
### Проверка на соответствие набору условий, предикату
|
|
|
|
* `СоответствуетПредикату` - проверяет, что объект или его свойство соответствует набору условий
|
|
* `КаждыйЭлементСоответствуетПредикату` - проверяет, что элементы коллекции соответствуют переданным условиям
|
|
* `ЛюбойЭлементСоответствуетПредикату` - проверяет, что коллекция содержит элемент, который соответствует переданным условиям
|
|
* `Содержит` - проверяемая коллекция должна содержать элемент, который соответствует переданным условиям
|
|
* `НеСодержит` - проверяемая коллекция не должна содержать элемент, который соответствует переданным условиям
|
|
|
|
### Проверка методов объекта
|
|
|
|
Для проверки работы методов объекта есть набор утверждений среди описанных выше (`ВыбрасываетИсключение` и `НеВыбрасываетИсключение`), но для их работы необходимо выполнить предварительные настройки.
|
|
Нужно указать какой методы объекта мы хотим проверить и с какими параметрами, для этого имеются следующие методы api
|
|
|
|
* `Метод` - устанавливает имя и параметры проверяемого метода
|
|
* `Параметр` - добавляет параметр метода. Создан для удобства установки параметров проверяемого метода
|
|
|
|
### Методы позиционирования
|
|
|
|
В дополнении к указанным методам утверждений есть возможность применить их к вложенным свойствам. Например, проверить, наличие заполненной табличной части документа используя выражение `ОжидаетЧто(Документ).Свойство("Товары").Заполнено()`.
|
|
Используя методы `Свойство` и `Элемент` можно позиционировать утверждения на вложенный реквизит/элемент.
|
|
|
|
* `Свойство` - проверяет наличие свойства и позиционирует дальнейшие проверки на указанном свойстве
|
|
* `Элемент` - проверяет наличие элемента коллекции и позиционирует дальнейшие проверки на указанном элементе
|
|
* `Объект` - позиционирует дальнейшие проверки на объекте, указанном в методе `Что`
|
|
* `НетСвойства` - проверяет отсутствие свойства и позиционирует дальнейшие проверки на объекте, указанном в методе `Что`
|
|
|
|
## Примеры
|
|
|
|
### Базовые проверки
|
|
|
|
```bsl
|
|
ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
|
|
.ИмеетТип("Число") // Проверим тип
|
|
.Заполнено() // Заполненность проверяемого значения
|
|
.Больше(0) // Сравним с нулем
|
|
.Равно(5); // Проверим ожидаемый результат
|
|
```
|
|
|
|
### Проверка сложного объекта
|
|
|
|
```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)
|
|
```
|
|
|
|
### Проверка вызова метода
|
|
|
|
```bsl
|
|
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
|
|
.Метод("МетодБезИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение"))
|
|
.НеВыбрасываетИсключение()
|
|
.НеВыбрасываетИсключение("Ожидаемое исключение");
|
|
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
|
|
.Метод("МетодИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение", 2))
|
|
.ВыбрасываетИсключение("Слишком много фактических параметров");
|
|
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
|
|
.Метод("МетодИсключение", ЮТОбщий.ЗначениеВМассиве("Исключение"))
|
|
.ВыбрасываетИсключение("Исключение");
|
|
ЮТУтверждения.Что(ОМ_ЮТУтверждения)
|
|
.Метод("МетодБезИсключение")
|
|
.ВыбрасываетИсключение("Недостаточно фактических параметров");
|
|
```
|
|
|
|
### Проверка соответствия предикату
|
|
|
|
```bsl
|
|
Дата = ЮТест.Данные().СлучайнаяДата();
|
|
|
|
Объект = Новый Структура;
|
|
Объект.Вставить("Число", 1);
|
|
Объект.Вставить("Строка", "1");
|
|
Объект.Вставить("Дата", Дата);
|
|
Объект.Вставить("Массив", ЮТОбщий.ЗначениеВМассиве(1, "1"));
|
|
|
|
ПроверкаЧисла = ЮТест.Предикат().Реквизит("Число")
|
|
.ИмеетТип(Тип("Число"))
|
|
.БольшеИлиРавно(1)
|
|
.МеньшеИлиРавно(10)
|
|
.Получить();
|
|
ПроверкаДаты = ЮТест.Предикат().Реквизит("Дата")
|
|
.ИмеетТип(Новый ОписаниеТипов("Дата"))
|
|
.Равно(Дата)
|
|
.Получить();
|
|
|
|
ЮТест.ОжидаетЧто(Объект)
|
|
.СоответствуетПредикату(ЮТест.Предикат()
|
|
.Заполнено()
|
|
.ИмеетТип("Структура"))
|
|
.СоответствуетПредикату(ПроверкаЧисла)
|
|
.СоответствуетПредикату(ПроверкаДаты)
|
|
;
|
|
```
|
|
|
|
### Проверка элементов коллекции на соответствие предикату
|
|
|
|
```bsl
|
|
ТаблицаРезультатов = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C11", ОписанияТипов);
|
|
Ютест.ОжидаетЧто(ТаблицаРезультатов)
|
|
.ИмеетТип("Массив")
|
|
.ИмеетДлину(3)
|
|
.КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
|
|
.Реквизит("Товар").Заполнено().ИмеетТип("СправочникСсылка.Товары")
|
|
.Реквизит("Период").Заполнено().ИмеетТип("Дата")
|
|
.Реквизит("Количество").Заполнено().ИмеетТип("Число")
|
|
.Реквизит("Цена").Заполнено().ИмеетТип("Число")
|
|
)
|
|
```
|