Предикаты
Предикаты — это декларативный способ описания условий для проверки объектов, коллекций и данных в базе. Они позволяют формировать сложные проверки с помощью цепочек методов (fluent-интерфейс), что делает тесты более читаемыми и поддерживаемыми.
Предикаты это довольно мощный и универсальный инструмент. С помощью предикатов вы формируете набор условий, сродни отбору. Который можно использовать:
- В утверждениях для проверки коллекций
- В утверждениях для проверки записей базы
- Для получения данных базы
- Для указания условий при обучении Мокито
Предикаты расширяют и унифицируют функциональность тестового движка.
Механизм предикатов (ЮТест.Предикат):
- позволяет формировать наборы условий (отборы) и передавать их в качества параметров;
- построен по модели текучих выражений и имеет схожий с базовыми утверждениями синтаксис (
ЮТест.ОжидаетЧто()
); - позволяет упростить и унифицировать многие механизмы движка, некоторые еще только в планах;
- за счет этого, расширение функциональности предикатов автоматические расширяет функциональность многих механизмов движка.
Чтобы воспользоваться предикатами, вам нужно сначала создать их с помощью конструктора ЮТест.Предикат, а затем передать в метод.
Например, нам нужно проверить формирование записей в регистре.
Процедура АктуализацияУведомлений() Экспорт
// Тест удостовериться в отсутствии нужных записей перед вызовом метода
// Вызовет метод формирующий записи в регистре
// Проверит наличие сформированных записей
// А также проверит записи на соответствие требований
ИмяРегистра = "РегистрСведений.ОповещенияПользователя";
Объект = ТестовыеДанные.Объект();
// Для этого мы формируем отбор поиска записей
Отбор = ЮТест.Предикат()
.Реквизит("Источник").Равно(Объект)
.Реквизит("ТипОповещения").Равно(Справочники.ТипыОповещенийПользователя.Уведомление)
.Получить();
// По этому отбору проверим отсутствие нужных записей
ЮТест.ОжидаетЧтоТаблицаБазы(ИмяРегистра)
.НеСодержитЗаписи(Отбор);
УведомленияВызовСервера.АктуализацияУведомлений();
// А после вызова метода - присутствие
ЮТест.ОжидаетЧтоТаблицаБазы(ИмяРегистра)
.СодержитЗаписи(Отбор);
// Также получим сами записи используя тот же отбор
ДанныеУведомления = ЮТЗапросы.Запись(ИмяРегистра, Отбор);
ЮТест.ОжидаетЧто(ДанныеУведомления)
.Свойство("Прочитано").ЭтоЛожь()
.Свойство("Пользователь").Равно(Справочники.ГруппыОповещенийПользователей.Инженер);
КонецПроцедуры
Возможности
- Проверка вложенных свойств:
- Проверки
Равно
- Добавляет предикат, проверяющий равенство объекта (свойства) указанному значениюНеРавно
- Добавляет предикат, проверяющий не равенство объекта (свойства) указанному значениюЗаполнено
- Добавляет предикат, проверяющий заполненность объекта (свойства)Пусто
- Добавляет предикат, проверяющий, что объект (свойств) не заполненоБольше
- Добавляет предикат, проверяющий, что значение объекта (свойства) больше указанногоБольшеИлиРавно
- Добавляет предикат, проверяющий, что значение объекта (свойства) больше или равно указанномуМеньше
- Добавляет предикат, проверяющий, что значение объекта (свойства) меньше указанногоМеньшеИлиРавно
- Добавляет предикат, проверяющий, что значение объекта (свойства) меньше или равно указанномуИмеетТип
- Добавляет предикат, проверяющий, что значение объекта (свойства) имеет указанный типИмеетТипОтличныйОт
- Добавляет предикат, проверяющий, что значение объекта (свойства) имеет тип отличный от указанногоИмеетДлину
- Добавляет предикат, проверяющий, длину/размер значение объекта (свойства) на равенство указанному значениюИмеетДлинуОтличнуюОт
- Добавляет предикат, проверяющий, длину/размер значение объекта (свойства) на не равенство указанному значениюИмеетСвойство
- Добавляет предикат, проверяющий, что значение объекта (реквизита) содержит вложе нное свойствоНеИмеетСвойства
- Добавляет предикат, проверяющий, что значение объекта (реквизита) не содержит вложенное свойствоСодержит
- Добавляет предикат, проверяющий, что значение объекта (реквизита) содержит указанное значениеНеСодержит
- Добавляет предикат, проверяющий, что значение объекта (реквизита) не содержит указанное значениеСодержитСтрокуПоШаблону
- Добавляет предикат, проверяющий, что строка соответствует указанному регулярному выражениюНеСодержитСтрокуПоШаблону
- Добавляет предикат, проверяющий, что строка не соответствует указанному регулярному выражениюВСпис ке
- Добавляет условие, что проверяемое значение (или значение его свойства) входит в список значений- Между
Между
/МеждуВключаяГраницы
- Добавляет условие, что проверяемое значение (или значение его свойства) входит в заданный интервал.
Проверяемое значение может находится на границе интервала.МеждуИсключаяГраницы
- Добавляет условие, что проверяемое значение (или значение его свойства) входит в заданный интервал.
Проверяемое значение не может находится на границе интервала.МеждуВключаяНачалоГраницы
- Добавляет условие, что проверяемое значение (или значение его свойства) входит в заданный интервал.
Проверяемое значение может находится на начальной гра нице интервала.МеждуВключаяОкончаниеГраницы
- Добавляет условие, что проверяемое значение (или значение его свойства) входит в заданный интервал.
Проверяемое значение может находится на конечной границе интервала.
- Служебные
Получить
- Возвращает набор сформированных утверждений.
Рекомендуется использовать этот метод, если планируется отложенная проверка предикатов. Например, вы хотите сформировать два набору предикатов и проверять их в зависимости от условия.
Метод копирует настроенный набор утверждений в массив и возвращает его, таким образом сохраняется состояние, которое можно передавать дальше.
Возможно создавать предикаты на основании структуры - ЮТест.Предикат(Структура)
, например:
// Вместо
Предикат = ЮТест.Предикат()
.Свойство("Наименование").Равно(НаименованиеОбъекта)
.Свойство("Код").Равно(КодОбъекта);
// Можно использовать структур
Условия = Новый Структура("Наименование, Код", НаименованиеОбъекта, КодОбъекта);
Предикат = ЮТест.Предикат(Условия);
Примеры использования
Проверка коллекции
// Проверяет, что в коллекции есть элементы с реквизитом `Число`, значение которого равно `2`
ЮТест.ОжидаетЧто(Коллекция)
.ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат()
.Реквизит("Число").Равно(2));
// Тоже самое, что и проверка выше
ЮТест.ОжидаетЧто(Коллекция)
.Содержит(ЮТест.Предикат()
.Реквизит("Число").Равно(2));
// Проверяет, что каждый элемент коллекции — заполненный массив
ЮТест.ОжидаетЧто(Коллекция)
.КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
.Заполнено().ИмеетТип("Массив"));
// Проверят, что в коллекции нет элементов с реквизитом `Число`, значение которого равно `2`
ЮТест.ОжидаетЧто(Коллекция)
.НеСодержит(ЮТест.Предикат()
.Реквизит("Число").Равно(2));