Базовые утверждения
Утверждения для проверки значений
Доступ к утверждениям обеспечивает метод ЮТест.ОжидаетЧто
, который возвращает инициализированный модуль ЮТУтверждения
, реализующий работу с утверждениями.
Не рекомендуется обращаться к модулю ЮТУтверждения
напрямую, используйте ЮТест.ОжидаетЧто
- Реализован достаточный набор проверок значений
- Большая часть методов - это сравнения фактического и ожидаемого результатов, но есть несколько методов настройки
Что
- устанавливает проверяемый объект. Все дальнейшие проверки будут выполняется с этим объектомМетод
- устанавливает имя и параметры проверяемого метода. Для проверки методов имеются утвержденияВыбрасываетИсключение
иНеВыбрасываетИсключение
Параметр
- добавляет параметр метода. Создан для удобства установки параметров проверяемого методаСвойство
- устанавливает проверяемое свойство и проверяет его наличие.- Последующие проверки, вызванные после этого метода, будут относиться к свойству объекта.
Например,
ЮТест.ОжидаетЧто(Контекст).Свойство("ИмяМетода").Равно("МетодБезИсключение")
эквивалентно проверкеКонтекст.ИмяМетода = "МетодБезИсключение"
- Последующие проверки, вызванные после этого метода, будут относиться к свойству объекта.
Например,
- Методы работы со свойствами позволяют указывать цепочку свойств (доступ к вложенным свойствам через точку)
Например:
Свойство("Контекст.ИмяМетода")
- вложенное свойствоИмеетСвойство("Контекст.ПараметрыМетода[0]")
- элемент вложенной коллекцииНеИмеетСвойства("[0].Свойство")
- свойство элемента коллекции
- Все методы имеют параметр
ОписаниеПроверки
для детального описания.
Доступные методы
Полный и актуальный набор методов смотрите в описании API
Сравнение значений
Равно
- проверка на равенство конкретному значению. Для сериализуемых объектов идет сравнение по значениюНеРавно
- проверка на не равенство конкретному значению. Для сериализуемых объектов идет сравнение по значениюБольше
- проверяемое значение должно быть больше указанногоБольшеИлиРавно
- проверяемое значение должно быть больше или равно указанномуМеньше
- проверяемое значение должно быть меньше указанногоМеньшеИлиРавно
- проверяемое значение должно быть меньше или равно указанномуЭтоНеопределено
- проверяемое значение должно быть равноНеопределено
ЭтоНеНеопределено
- проверяемое значение должно быть не равноНеопределено
ЭтоNull
- проверяемое значение должно быть равноNull
ЭтоНеNull
- проверяемое значение должно быть не равноNull
ЭтоИстина
- проверяемое значение должно быть истинойЭтоНеИстина
- проверяемое значение не должно быть истинойЭтоЛожь
- проверяемое значение должно быть ложьюЭтоНеЛожь
- проверяемое значение не должно быть ложьюВСписке
- проверяемое значение должно входить в список указанных.
Значение = 1;
ЮТУтверждения.Что(Значение)
.Равно(1)
.НеРавно(2)
.Больше(0)
.БольшеИлиРавно(-10)
.Меньше(10)
.МеньшеИлиРавно(2)
.ЭтоНеИстина()
.ЭтоНеЛожь()
.ВСписке(ЮТКоллекция.ЗначениеВМассиве(0, 1, 2));
Особенности сравнения
- При сравнении значений сравниваются их типы. Это отличается от стандартного поведения 1С:Предприятие, где некоторые значения разных типов могут быть равны, например
1 = Истина
ЮТест.ОжидаетЧто(1 = Истина).ЭтоИстина(); // Проверка успешна
ЮТест.ОжидаетЧто(1).Равно(Истина); // Проверка провалится - Для большинства типов данных реализовано сравнение "по значению", когда сравниваются (рекурсивно) значения реквизитов объекта.
- Поддерживается сравнение структур и соответствий.
Значение1 = Новый Структура("Реквизит", 1);
Значение2 = Новый Структура("Реквизит", 1);
ЮТест.ОжидаетЧто(Значение1 = Значение2).ЭтоИстина(); // Проверка провалится
ЮТест.ОжидаетЧто(Значение1).Равно(Значение2); // Проверка успешна - Поддерживается сравнение массивов, таблиц и табличных документов.
- Поддерживается сравнение значений упакованных в
ХранилищеЗначения
. - Для прочих сериализуемых значений (не примитивов) сравнение происходит через сериализацию в JSON.
Методы позиционирования
Любое из утверждений можно применять как к самому анализируемому объекту, так и к его свойствам, реквизитам, вложенным элементам.
Например, проверить, наличие заполненной табличной части документа используя выражение
ЮТест.ОжидаетЧто(Документ)
.Свойство("Товары").Заполнено()
.Свойство("Товары[0].Номенклатура").Равно(ОжидаемыйТовар)
;
Благодаря методам Свойство
и Элемент
можно позиционировать (переключать объект проверки) утверждения на вложенный реквизит/элемент.
Методы Свойство
и Элемент
переключают объект проверки для последующих методов-утверждений. Они будут применяться к значению свойства или элементу коллекции. Но не переключает сам контекст на это значение, а всегда применяется к исходному объекту, помещенному в ОжидаетЧто
.
Свойство
- проверяет наличие свойства и позиционирует дальнейшие проверки на указанном свойстве.Элемент
- проверяет наличие элемента коллекции и позиционирует дальнейшие проверки на указанном элементе. На самом деле это просто алиас (псевдоним) для методаСвойство
и выполняет он тоже самое.Объект
- позиционирует дальнейшие проверки на объекте, указанном в методеОжидаетЧто
.НетСвойства
- проверяет отсутствие свойства и позиционирует дальнейшие проверки на объекте, указанном в методеОжидаетЧто
.
Методы Свойство
и Элемент
всегда вычисляют путь от объекта указанного в ОжидаетЧто
, они не учитывают предыдущие изменения позиции.
Например, чтобы проверить значение реквизита Реквизит.ВложенныйРеквизит
Объект = Новый Структура("Реквизит", Новый Структура("ВложенныйРеквизит", 1));
ЮТест.ОжидаетЧто(Объект)
.Свойство("Реквизит")
.Свойство("ВложенныйРеквизит").Равно(1) // Выбросит исключение, тк объект не содержит свойство "ВложенныйРеквизит"
;
Правильно в таком примере указывать сразу полный путь для свойства.
ЮТест.ОжидаетЧто(Объект)
.Свойство("Реквизит.ВложенныйРеквизит").Равно(1)
;
Методы Свойство
и Элемент
, принимают на вход не просто имя реквизита, а выражение, для перехода к нужному свойству, таким образом вы можете позиционироваться:
- На свойствах объекта
ЮТест.ОжидаетЧто(Объект)
.Свойство("Реквизит").Равно(ОжидаемоеЗначение) - На вложенных свойствах объекта
Свойство("Реквизит.ВложенныйРеквизит")
ЮТест.ОжидаетЧто(Объект)
.Свойство("Реквизит.ВложенныйРеквизит").Равно(ОжидаемоеЗначение) - На элементах коллекций
ЮТест.ОжидаетЧто(Документ.Товары)
.Свойство("[0].Товар").Равно(ОжидаемоеЗначение);
// Или
ЮТест.ОжидаетЧто(Документ)
.Свойство("Товары[0].Товар").Равно(ОжидаемоеЗначение); - Можно позиционировать на элементах коллекции с конца
ЮТест.ОжидаетЧто(Документ.Товары)
.Свойство("[-1].Товар").Равно(ОжидаемоеЗначение) // Последний элемент;
.Элемент(-1).ИмеетСвойство("Товар") // Последний элемент
Проверка заполненности
Заполнено
- проверяет заполненность значенияЮТест.ОжидаетЧто(ОбъектПроверки)
.Заполнено()
.Свойство("Номер").Заполнено();НеЗаполнено
- проверяет незаполненность значенияЗначения = ЮТКоллекции.ЗначениеВМассиве(0, "", " ", Неопределено, Null, '00010101', Новый Структура(), Справочники.Товары.ПустаяСсылка());
Для каждого Значение Из Значения Цикл
ЮТест.ОжидаетЧто(Значение)
.НеЗаполнено()
КонецЦикла;Существует
- проверяет существование (не равноNull
иНеопределено
) значенияЮТест.ОжидаетЧто(ВыборкаЗапроса)
.Свойство("Номер").Существует();НеСуществует
- проверяет не существование (не равноNull
иНеопределено
) значенияЮТест.ОжидаетЧто(ВыборкаЗапроса)
.Свойство("Номер").НеСуществует();
Проверка строк
ИмеетДлину
- проверяет, что строка имеет указанную длинуИмеетДлинуБольше
- проверяет, что длин строки больше указаннойИмеетДлинуМеньше
- проверяет, что длина строки меньше указаннойНеИмеетДлину
- проверяет, что длина строки отличается от указаннойСодержит
- проверяемая строка содержит указанную подстрокуНеСодержит
- проверяемая строка не содержит указанную подстрокуНачинаетсяС
- проверяемая строка начинается с указанной строкиЗаканчиваетсяНа
- проверяемая строка заканчивается на указанную строку
ПроверяемоеЗначение = "Ох, нелегкая это работа - Из болота тащить бегемота";
ЮТест.ОжидаетЧто("ПроверяемоеЗначение")
.ИмеетДлинуБольше(10)
.ИмеетДлинуМеньше(100)
.ИмеетДлину(51)
.Содержит("работа")
.НеСодержит("зарплата")
.НачинаетсяС("Ох")
.ЗаканчиваетсяНа("мота")
СодержитСтрокуПоШаблону
- проверяемая строка содержит подстроку, соответствующую регулярному выражениюНеСодержитСтрокуПоШаблону
- проверяемая строка не содержит подстроку, соответствующую регулярному выражению
ПроверяемоеЗначение = "Ох, нелегкая это работа - Из болота тащить бегемота";
ЮТест.ОжидаетЧто("ПроверяемоеЗначение")
.СодержитСтрокуПоШаблону("^[а-яА-Я\s,\-]*$") // Строка содержит только кириллицу, пробелы и знаки пунктуации
.НеСодержитСтрокуПоШаблону("\d") // Не содержит цифр
Проверка вхождения значения в интервал
МеждуВключаяГраницы
- проверяемое значение находиться в указанному интервале (включая границы)МеждуИсключаяГраницы
- проверяемое значение находиться в указанному интервале (исключая границы)МеждуВключаяНачалоГраницы
- проверяемое значение находиться в указанному интервале (включая левую границу и исключая правую)МеждуВключаяОкончаниеГраницы
- проверяемое значение находиться в указанному интервале (исключая левую границу и включая правую)
ЮТест.ОжидаетЧто(10)
.МеждуВключаяГраницы(0, 10)
.МеждуИсключаяГраницы(0, 100);
ЮТест.ОжидаетЧто(ТекущаяДата())
.МеждуВключаяНачалоГраницы(НачалоДня, НачалоСледующегоДня);
Проверка типа значения
ИмеетТип
- проверяемое значение должно иметь указанный типНеИмеетТип
- тип провер яемого значения должен отличаться от указанного
В качестве аргумента можно указывать
- Имя типа строкой или список имен типов через запятую.
ИмеетТип("Строка").ИмеетТип("Строка, Число")
- Конкретный тип.
ИмеетТип(Тип("Строка"))
- Описание типов.
ИмеетТип(Новый ОписаниеТипов("Строка, Число"))
Проверка выполнения метода
API для проверки, выбрасываемых методом проверяемого объекта исключения.
Первоначально необходимо описать какой метод нужно проверить, к какому объекту он относится и с какими параметрами его необходимо вызвать. Для этих целей необходимо использовать:
ЮТест.ОжидаетЧто
- устанавливает владельца методаМетод
- устанавливает имя и параметры проверяемого методаПараметр
- добавляет параметр метода. Создан для удобства установки параметров проверяемого метода
После формируем ожидание - должен или нет методы выбросить исключение и с каким текстом.
-
ВыбрасываетИсключение
- выполняет настроенный метод объекта с параметрами и проверяет, что метод выбросит исключение и текст исключения содержит(включает) указанную в строку. При необходимости можно настроить (передать параметр), чтобы метод выполнился в транзакции.ЮТест.ОжидаетЧто(Документ) // Объект, метод которого прове ряем
.Метод("Записать").Параметр(РежимЗаписиДокумента.Проведение) // Указываем проверяемый метод и параметры вызова
.ВыбрасываетИсключение("Значение поля ""Дата"" не может быть пустой датой") // Утверждение-проверка, исключение должно содержать указанный текст.
.ВыбрасываетИсключение("""Дата""") // Можно указать только часть исключения, проверить вхождение указанной строки.
.ВыбрасываетИсключение("""Дата""", , Истина) // Выполнение указанного метода в транзакцииВопросМожно ли не указывать текст исключения?
Ответ: Нельзя, вы должны конкретизировать свои ожидания, зафиксировать, какую ошибку ждете, иначе поведение может измениться и тест это не отработает. -
НеВыбрасываетИсключение
- выполняет настроенный метод объекта с параметрами и проверяет, что метод не выбросит исключение или выбросит исключения с текстом отличным от указанного. При необходимости можно настроить (передать параметр), чтобы метод выполнился в транзакции.ЮТест.ОжидаетЧто(Документ) // Объект, метод которого проверяем
.Метод("Записать").Параметр(РежимЗаписиДокумента.Проведение) // Указываем проверяемый метод и параметры вызова
.НеВыбрасываетИсключение() // Утверждение-проверка, метод выполниться без ошибки.
.НеВыбрасываетИсключение("""Дата""") // Утверждение-проверка, метод выполниться без ошибки, либо с ошибкой, которая не содержит "Дата".
.НеВыбрасываетИсключение("""Дата""", , Истина) // Выполнение указанного метода в транзакцииНе злоупотребляйте проверкойНеВыбрасываетИсключение
Многие используют это утверждения, для вызова чуть ли не каждого проверяемого метода. Этого делать не стоит.
Это утверждение должно редко применяться, если ваш метод упадет, это и так будет отражено в отчете. Один из случаев когда оно может применяться, вы используете его перед проверками на исключения, чтобы убед ится, что метод рабочий.Документ = СоздатьДокумент();
Утверждение = ЮТест.ОжидаетЧто(Документ)
.Метод("Записать").Параметр(РежимЗаписиДокумента.Проведение)
.НеВыбрасываетИсключение("""Дата"""); // Проверим, что при нормальном заполнении ошибки нет
Документ.Дата = Неопределено;
Утверждение.ВыбрасываетИсключение("""Дата""", "Документ проведен при незаполненной дате");Нельзя явно вызывать проверяемый методХочу обратить внимание. Когда вы проверяете метод на исключения/их отсутствие вы должны указать:
ЮТест.ОжидаетЧто(Документ) // 1. Владельца метода
.Метод("Записать") // 2. Имя метода
.Параметр(РежимЗаписиДокумента.Проведение) // 3. Параметры вызова метода
// Явно вызывать метод нельзя.
ЮТест.ОжидаетЧто(Документ)
.Метод(Документ.Записать(РежимЗаписиДокумента.Проведение)) // Так делать нельзя, так не сработает проверка.