Конструктор движений документа
YAXUnit предоставляет мощный инструмент для создания тестовых данных — Конструктор движений документа (ЮТест.Данные()
.КонструкторДвижений
). Этот инструмент позволяет быстро и удобно формировать движения документов, что значительно упрощает процесс подготовки данных для тестов. Конструктор поддерживает работу с различными видами документов и регистров, а также автоматизирует генерацию фиктивных значений для реквизитов.
Основные возможности
- Текучий интерфейс: Удобная цепочка вызовов для формирования данных.
- Генерация фиктивных значений: Упрощает заполнение реквизитов, оставляя акцент на важных для теста данных.
- Поддержка обязательных полей: Автоматически заполняет обязательные реквизиты.
- Универсальность: Работает с любыми документами и регистрами движений.
- Работа с клиентом: Умеет создавать данные с клиента и удалять их по окончании теста.
- Обработка ошибок: Предоставляет понятные сообщения об ошибках.
Примеры использования
Кроме примеров ниже вы можете ознакомиться с тесты движка
Движения по регистру накопления
Рассмотрим пример формирования движений по регистру накопления "ОстаткиТоваров".
// Создаем пустой документ "ПриходнаяНакладная"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ПриходнаяНакладная");
// Формируем движения по регистру "ОстаткиТоваров"
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.Установить("Количество", 10)
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.Установить("Количество", 5)
.Записать();
Движения по регистру накопления с разными видами операций
Док = ЮТест.Данные().СоздатьДокумент("Документы.ПеремещениеТоваров");
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Номенклатура");
Количество = 100500;
// Создаем конструктор для регистра "ТоварныеЗапасы"
Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ТоварныеЗапасы");
// Приход на склад-получатель
Конструктор.ДобавитьСтроку()
.Установить("ВидДвижения", ВидДвиженияНакопления.Приход)
.Фикция("Склад")
.Установить("Товар", Товар)
.Установить("Количество", Количество);
// Расход со склада-отправителя
Конструктор.ДобавитьСтроку()
.Установить("ВидДвижения", ВидДвиженияНакопления.Расход)
.Фикция("Склад")
.Установить("Товар", Товар)
.Установить("Количество", Количество);
Конструктор.Записать();
// Проверка записанных движений
Движения = ЮТЗапросы.ДвиженияДокумента(Док, "ТоварныеЗапасы");
ЮТест.ОжидаетЧто(Движения)
.ИмеетДлину(2)
.Что(Движения[0].ВидДвижения).Равно(ВидДвиженияНакопления.Приход)
.Что(Движения[1].ВидДвижения).Равно(ВидДвиженияНакопления.Расход);
Движения по регистру бухгалтерии
Пример формирования проводок по регистру бухгалтерии "Хозрасчетный".
// Создаем пустой документ "ОперацияБухгалтерскийУчет"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ОперацияБухгалтерскийУчет");
// Формируем проводки по регистру "Хозрасчетный"
ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
.ДобавитьСтроку()
.ФикцияРеквизитов("СчетДт, СчетКт")
.Установить("Сумма", 1000)
.ДобавитьСтроку()
.ФикцияРеквизитов("СчетДт, СчетКт")
.Установить("Сумма", 500)
.Записать();
Движения по регистру расчета
Пример формирования движений по регистру расчета "НачислениеЗарплаты".
// Создаем пустой документ "НачислениеЗарплаты"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.НачислениеЗарплаты");
// Формируем движения по регистру "НачислениеЗарплаты"
ЮТест.Данные().КонструкторДвижений(Документ, "НачислениеЗарплаты")
.ДобавитьСтроку()
.ФикцияРеквизитов("Сотрудник, ВидРасчета")
.Установить("Сумма", 50000)
.ДобавитьСтроку()
.ФикцияРеквизитов("Сотрудник, ВидРасчета")
.Установить("Сумма", 30000)
.Записать();
Установка произвольного периода для движения
По умолчанию конструктор в качестве периода использует дату документа, но вы можете указать свой период для каждой строки движений.
Док = ЮТест.Данные().СоздатьДокумент("Документы.КорректировкаОстатков");
ПроизвольнаяДата = '20240101';
Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияОбязательныхПолей()
.Установить("Период", ПроизвольнаяДата);
Конструктор.Записать();
// Проверка периода в записи регистра
Запись = ЮТЗапросы.ДвиженияДокумента(Док, "ОстаткиТоваров")[0];
ЮТест.ОжидаетЧто(Запись.Период).Равно(ПроизвольнаяДата);
Автоматическое заполнением обязательных реквизитов
Док = ЮТест.Данные().СоздатьДокумент("Документы.АктВыполненныхРабот");
Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ВыполненныеУслуги")
.ДобавитьСтроку()
.ФикцияОбязательныхПолей()
.Установить("Сумма", 10000);
Конструктор.Записать();
// Проверка заполнения обязательных полей
Запись = ЮТЗапросы.ДвиженияДокумента(Док, "ВыполненныеУслуги");
ЮТест.ОжидаетЧто(Запись[0])
.Свойство("Услуга").Заполнено()
.Свойство("Контрагент").Заполнено()
.Свойство("Сумма").Равно(10000);
Контроль остатков
ДокПриход = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары");
Склад = ЮТест.Данные().СоздатьЭлемент("Справочники.Склады");
Конструктор = ЮТест.Данные().КонструкторДвижений(ДокПриход, "ТоварныеЗапасы")
.ДобавитьСтроку()
.Установить("ВидДвижения", ВидДвиженияНакопления.Приход)
.Установить("Товар", Товар)
.Установить("Склад", Склад)
.Установить("Количество", 1);
КонструкторДокумента = ЮТест.Данные().КонструкторОбъекта("Документы.РасходТовара")
.ФикцияОбязательныхПолей()
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Установить("Товар", Товар)
.Установить("Склад", Склад)
.Установить("Количество", 100);
// Попытка списания без остатка
ЮТест.ОжидаетЧто(КонструкторДокумента)
.Метод("Провести")
.ВыбрасываетИсключение("Недостаточно товара на складе");
Методы конструктора движений
Добавление строки движения
Метод ДобавитьСтроку
добавляет новую запись в набор движений. При необходимости можно сразу установить значения реквизитов.
Функция ДобавитьСтроку(ЗначенияРеквизитов = Неопределено) Экспорт
Параметры:
ЗначенияРеквизитов
(Структура, по умолчаниюНеопределено
): Устанавливаемые значения реквизитов новой записи.
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.Установить("Номенклатура", ЮТест.Данные().Создать("Справочники.Номенклатура"));
Установка значения реквизита
Метод Установить
позволяет задать значение конкретного реквизита текущей записи.
Функция Установить(ИмяРеквизита, Значение) Экспорт
Параметры:
ИмяРеквизита
(Строка): Имя реквизита записи.Значение
(Произвольный): Значение реквизита.
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
.ДобавитьСтроку()
.Установить("СчетДт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));
Установка значений нескольких реквизитов
Метод УстановитьРеквизиты
позволяет задать сразу несколько реквизитов.
Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт
Параметры:
ЗначенияРеквизитов
(Структура): Устанавливаемые значения реквизитов.
Пример:
Значения = Новый Структура;
Значения.Вставить("СчетДт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));
Значения.Вставить("СчетКт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));
ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
.ДобавитьСтроку()
.УстановитьРеквизиты(Значения);
Генерация фиктивных значений
Метод Фикция
автоматически заполняет реквизит фиктивным значением, основываясь на его типе.
Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт
Параметры:
ИмяРеквизита
(Строка): Имя реквизита записи.РеквизитыЗаполнения
(Структура, по умолчаниюНеопределено
): Значения реквизитов заполнения создаваемого объекта.ОграничениеТипа
(Тип, ОписаниеТипов, по умолчаниюНеопределено
): Используется для ограничения типа составного реквизита.
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.Фикция("Номенклатура");
Генерация фиктивных значений для нескольких реквизитов
Метод ФикцияРеквизитов
заполняет сразу несколько реквизитов фиктивными значениями.
Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт
Параметры:
ИменаРеквизитов
(Строка или Массив из Строка): Имена реквизитов записи, разделенные запятыми или переданные в массиве.
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад");
Фикция обязательных полей
Метод ФикцияОбязательныхПолей
автоматически заполняет обязательные реквизиты записи фиктивными значениями.
Функция ФикцияОбязательныхПолей() Экспорт
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияОбязательныхПолей()
.Записать();
Фикция незаполненных
Метод ФикцияНезаполненных
автоматически заполняет все незаполненные реквизиты записи фиктивными значениями.
На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение:
- Для примитивных значение генерируется случайное значение
- Для ссылочных типов создается новый объект
- Для перечислений (в том числе системных) выбирается случайно значение перечисления
Функция ФикцияНезаполненных(ИменаРеквизитов) Экспорт
Параметры:
ИменаРеквизитов
(Строка, Массив из Строка) - Имена реквизитов записи. При передаче строкой, имена разделяются запятыми.
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.Установить("Склад", Склад)
.ФикцияНезаполненных() // Заполнит все остальные реквизиты
.Записать();
Док = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары");
Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ТоварныеЗапасы");
Конструктор.ДобавитьСтроку()
.Установить("Товар", Товар)
.ФикцияНезаполненных("Склад, Количество");
Фикция незаполненных исключая
Метод ФикцияНезаполненныхИсключая
автоматически заполняет все незаполненные реквизиты записи фиктивными значениями, кроме указанных в списке исключений.
Функция ФикцияНезаполненныхИсключая(ИменаИсключений) Экспорт
Параметры:
ИменаИсключений
(Строка, Массив из Строка) - Имена реквизитов, которые не нужно заполнять. При передаче строкой, имена разделяются запятыми.
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияНезаполненныхИсключая("Количество, Сумма") // Заполнит все реквизиты, кроме Количества и Суммы
.Записать();
Установка дополнительного свойства
Метод УстановитьДополнительноеСвойство
позволяет задать дополнительное свойство набора записей.
Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение = Неопределено) Экспорт
Параметры:
ИмяСвойства
(Строка): Имя дополнительного свойства.Значение
(Произвольный, по умолчаниюНеопределено
): Значение дополнительного свойства.
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
.УстановитьДополнительноеСвойство("ПризнакДвижения", "Приход");
Получение данных строки
Метод ДанныеСтроки
возвращает данные текущей записи набора.
Функция ДанныеСтроки() Экспорт
Пример:
Данные = ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.ДанныеСтроки();
Получение данных набора
Метод Данные
возвращает данные всего набора записей.
Функция Данные() Экспорт
Пример:
Данные = ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.Данные();
Запись движений
Метод Записать
фиксирует сформированные движения документа.
Процедура Записать(ОбменДаннымиЗагрузка = Ложь) Экспорт
Параметры:
ОбменДаннымиЗагрузка
(Булево, по умолчаниюЛожь
): Признак записи с флагомОбменДанными.Загрузка = Истина
.
Пример:
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
.ДобавитьСтроку()
.ФикцияРеквизитов("Номенклатура, Склад")
.Записать();
Заключение
Конструктор движений документа в YAXUnit — это мощный инструмент для создания тестовых данных, который значительно упрощает и ускоряет процесс тестирования. Его использование позволяет сосредоточиться на логике тестов, а не на рутинной подготовке данных.