Перейти к основному содержимому

Конструктор движений документа

YAXUnit предоставляет мощный инструмент для создания тестовых данных — Конструктор движений документа (ЮТест.Данные().КонструкторДвижений). Этот инструмент позволяет быстро и удобно формировать движения документов, что значительно упрощает процесс подготовки данных для тестов. Конструктор поддерживает работу с различными видами документов и регистров, а также автоматизирует генерацию фиктивных значений для реквизитов.

Основные возможности

  • Текучий интерфейс: Удобная цепочка вызовов для формирования данных.
  • Генерация фиктивных значений: Упрощает заполнение реквизитов, оставляя акцент на важных для теста данных.
  • Поддержка обязательных полей: Автоматически заполняет обязательные реквизиты.
  • Универсальность: Работает с любыми документами и регистрами движений.
  • Работа с клиентом: Умеет создавать данные с клиента и удалять их по окончании теста.
  • Обработка ошибок: Предоставляет понятные сообщения об ошибках.

Примеры использования

Кроме примеров ниже вы можете ознакомиться с тесты движка

Движения по регистру накопления

Рассмотрим пример формирования движений по регистру накопления "ОстаткиТоваров".

// Создаем пустой документ "ПриходнаяНакладная"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ПриходнаяНакладная");

// Формируем движения по регистру "ОстаткиТоваров"
ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .ФикцияРеквизитов("Номенклатура, Склад")
        .Установить("Количество", 10)
    .ДобавитьСтроку()
        .ФикцияРеквизитов("Номенклатура, Склад")
        .Установить("Количество", 5)
    .Записать();

Движения по регистру накопления с разными видами операций

Док = ЮТест.Данные().СоздатьДокумент("Документы.ПеремещениеТоваров");
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Номенклатура");
Количество = 100500;

// Создаем конструктор для регистра "ТоварныеЗапасы"
Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ТоварныеЗапасы");

// Приход на склад-получатель
Конструктор.ДобавитьСтроку()
    .Установить("ВидДвижения", ВидДвиженияНакопления.Приход)
    .Фикция("Склад")
    .Установить("Товар", Товар)
    .Установить("Количество", Количество);

// Расход со склада-отправителя
Конструктор.ДобавитьСтроку()
    .Установить("ВидДвижения", ВидДвиженияНакопления.Расход)
    .Фикция("Склад")
    .Установить("Товар", Товар)
    .Установить("Количество", Количество);

Конструктор.Записать();

// Проверка записанных движений
Движения = ЮТЗапросы.ДвиженияДокумента(Док, "ТоварныеЗапасы");
ЮТест.ОжидаетЧто(Движения)
    .ИмеетДлину(2)
    .Что(Движения[0].ВидДвижения).Равно(ВидДвиженияНакопления.Приход)
    .Что(Движения[1].ВидДвижения).Равно(ВидДвиженияНакопления.Расход);

Движения по регистру бухгалтерии

Пример формирования проводок по регистру бухгалтерии "Хозрасчетный".

// Создаем пустой документ "ОперацияБухгалтерскийУчет"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.ОперацияБухгалтерскийУчет");

// Формируем проводки по регистру "Хозрасчетный"
ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
    .ДобавитьСтроку()
        .ФикцияРеквизитов("СчетДт, СчетКт")
        .Установить("Сумма", 1000)
    .ДобавитьСтроку()
        .ФикцияРеквизитов("СчетДт, СчетКт")
        .Установить("Сумма", 500)
    .Записать();

Движения по регистру расчета

Пример формирования движений по регистру расчета "НачислениеЗарплаты".

// Создаем пустой документ "НачислениеЗарплаты"
Документ = ЮТест.Данные().СоздатьДокумент("Документы.НачислениеЗарплаты");

// Формируем движения по регистру "НачислениеЗарплаты"
ЮТест.Данные().КонструкторДвижений(Документ, "НачислениеЗарплаты")
    .ДобавитьСтроку()
        .ФикцияРеквизитов("Сотрудник, ВидРасчета")
        .Установить("Сумма", 50000)
    .ДобавитьСтроку()
        .ФикцияРеквизитов("Сотрудник, ВидРасчета")
        .Установить("Сумма", 30000)
    .Записать();

Установка произвольного периода для движения

По умолчанию конструктор в качестве периода использует дату документа, но вы можете указать свой период для каждой строки движений.

Док = ЮТест.Данные().СоздатьДокумент("Документы.КорректировкаОстатков");
ПроизвольнаяДата = '20240101';

Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .ФикцияОбязательныхПолей()
        .Установить("Период", ПроизвольнаяДата);

Конструктор.Записать();

// Проверка периода в записи регистра
Запись = ЮТЗапросы.ДвиженияДокумента(Док, "ОстаткиТоваров")[0];
ЮТест.ОжидаетЧто(Запись.Период).Равно(ПроизвольнаяДата);

Автоматическое заполнением обязательных реквизитов

Док = ЮТест.Данные().СоздатьДокумент("Документы.АктВыполненныхРабот");

Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ВыполненныеУслуги")
    .ДобавитьСтроку()
        .ФикцияОбязательныхПолей()
        .Установить("Сумма", 10000);

Конструктор.Записать();

// Проверка заполнения обязательных полей
Запись = ЮТЗапросы.ДвиженияДокумента(Док, "ВыполненныеУслуги");
ЮТест.ОжидаетЧто(Запись[0])
    .Свойство("Услуга").Заполнено()
    .Свойство("Контрагент").Заполнено()
    .Свойство("Сумма").Равно(10000);

Контроль остатков

ДокПриход = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");

Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары");
Склад = ЮТест.Данные().СоздатьЭлемент("Справочники.Склады");

Конструктор = ЮТест.Данные().КонструкторДвижений(ДокПриход, "ТоварныеЗапасы")
    .ДобавитьСтроку()
        .Установить("ВидДвижения", ВидДвиженияНакопления.Приход)
        .Установить("Товар", Товар)
        .Установить("Склад", Склад)
        .Установить("Количество", 1);

КонструкторДокумента = ЮТест.Данные().КонструкторОбъекта("Документы.РасходТовара")
    .ФикцияОбязательныхПолей()
    .ТабличнаяЧасть("Товары")
        .ДобавитьСтроку()
            .Установить("Товар", Товар)
            .Установить("Склад", Склад)
            .Установить("Количество", 100);

// Попытка списания без остатка
ЮТест.ОжидаетЧто(КонструкторДокумента)
    .Метод("Провести")
    .ВыбрасываетИсключение("Недостаточно товара на складе");

Методы конструктора движений

Добавление строки движения

Метод ДобавитьСтроку добавляет новую запись в набор движений. При необходимости можно сразу установить значения реквизитов.

Функция ДобавитьСтроку(ЗначенияРеквизитов = Неопределено) Экспорт

Параметры:

  • ЗначенияРеквизитов (Структура, по умолчанию Неопределено): Устанавливаемые значения реквизитов новой записи.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .Установить("Номенклатура", ЮТест.Данные().Создать("Справочники.Номенклатура"));

Установка значения реквизита

Метод Установить позволяет задать значение конкретного реквизита текущей записи.

Функция Установить(ИмяРеквизита, Значение) Экспорт

Параметры:

  • ИмяРеквизита (Строка): Имя реквизита записи.
  • Значение (Произвольный): Значение реквизита.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
    .ДобавитьСтроку()
        .Установить("СчетДт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));

Установка значений нескольких реквизитов

Метод УстановитьРеквизиты позволяет задать сразу несколько реквизитов.

Функция УстановитьРеквизиты(ЗначенияРеквизитов) Экспорт

Параметры:

  • ЗначенияРеквизитов (Структура): Устанавливаемые значения реквизитов.

Пример:

Значения = Новый Структура;
Значения.Вставить("СчетДт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));
Значения.Вставить("СчетКт", ЮТест.Данные().Создать("ПланыСчетов.Хозрасчетный"));

ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
    .ДобавитьСтроку()
        .УстановитьРеквизиты(Значения);

Генерация фиктивных значений

Метод Фикция автоматически заполняет реквизит фиктивным значением, основываясь на его типе.

Функция Фикция(ИмяРеквизита, РеквизитыЗаполнения = Неопределено, ОграничениеТипа = Неопределено) Экспорт

Параметры:

  • ИмяРеквизита (Строка): Имя реквизита записи.
  • РеквизитыЗаполнения (Структура, по умолчанию Неопределено): Значения реквизитов заполнения создаваемого объекта.
  • ОграничениеТипа (Тип, ОписаниеТипов, по умолчанию Неопределено): Используется для ограничения типа составного реквизита.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .Фикция("Номенклатура");

Генерация фиктивных значений для нескольких реквизитов

Метод ФикцияРеквизитов заполняет сразу несколько реквизитов фиктивными значениями.

Функция ФикцияРеквизитов(ИменаРеквизитов) Экспорт

Параметры:

  • ИменаРеквизитов (Строка или Массив из Строка): Имена реквизитов записи, разделенные запятыми или переданные в массиве.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .ФикцияРеквизитов("Номенклатура, Склад");

Фикция обязательных полей

Метод ФикцияОбязательныхПолей автоматически заполняет обязательные реквизиты записи фиктивными значениями.

Функция ФикцияОбязательныхПолей() Экспорт

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .ФикцияОбязательныхПолей()
    .Записать();

Фикция незаполненных

Метод ФикцияНезаполненных автоматически заполняет все незаполненные реквизиты записи фиктивными значениями.

На основании менеджера и имени реквизита вычисляется его тип, а по типу генерируется фиктивное значение:

  • Для примитивных значение генерируется случайное значение
  • Для ссылочных типов создается новый объект
  • Для перечислений (в том числе системных) выбирается случайно значение перечисления
Функция ФикцияНезаполненных(ИменаРеквизитов) Экспорт

Параметры:

  • ИменаРеквизитов (Строка, Массив из Строка) - Имена реквизитов записи. При передаче строкой, имена разделяются запятыми.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .Установить("Склад", Склад)
        .ФикцияНезаполненных() // Заполнит все остальные реквизиты
    .Записать();

Док = ЮТест.Данные().СоздатьДокумент("Документы.ПриходТовара");
Товар = ЮТест.Данные().СоздатьЭлемент("Справочники.Товары");

Конструктор = ЮТест.Данные().КонструкторДвижений(Док, "ТоварныеЗапасы");
Конструктор.ДобавитьСтроку()
    .Установить("Товар", Товар)
    .ФикцияНезаполненных("Склад, Количество");

Фикция незаполненных исключая

Метод ФикцияНезаполненныхИсключая автоматически заполняет все незаполненные реквизиты записи фиктивными значениями, кроме указанных в списке исключений.

Функция ФикцияНезаполненныхИсключая(ИменаИсключений) Экспорт

Параметры:

  • ИменаИсключений (Строка, Массив из Строка) - Имена реквизитов, которые не нужно заполнять. При передаче строкой, имена разделяются запятыми.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .ФикцияНезаполненныхИсключая("Количество, Сумма") // Заполнит все реквизиты, кроме Количества и Суммы
    .Записать();

Установка дополнительного свойства

Метод УстановитьДополнительноеСвойство позволяет задать дополнительное свойство набора записей.

Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение = Неопределено) Экспорт

Параметры:

  • ИмяСвойства (Строка): Имя дополнительного свойства.
  • Значение (Произвольный, по умолчанию Неопределено): Значение дополнительного свойства.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "Хозрасчетный")
    .УстановитьДополнительноеСвойство("ПризнакДвижения", "Приход");

Получение данных строки

Метод ДанныеСтроки возвращает данные текущей записи набора.

Функция ДанныеСтроки() Экспорт

Пример:

Данные = ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .ФикцияРеквизитов("Номенклатура, Склад")
        .ДанныеСтроки();

Получение данных набора

Метод Данные возвращает данные всего набора записей.

Функция Данные() Экспорт

Пример:

Данные = ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .ФикцияРеквизитов("Номенклатура, Склад")
    .Данные();

Запись движений

Метод Записать фиксирует сформированные движения документа.

Процедура Записать(ОбменДаннымиЗагрузка = Ложь) Экспорт

Параметры:

  • ОбменДаннымиЗагрузка (Булево, по умолчанию Ложь): Признак записи с флагом ОбменДанными.Загрузка = Истина.

Пример:

ЮТест.Данные().КонструкторДвижений(Документ, "ОстаткиТоваров")
    .ДобавитьСтроку()
        .ФикцияРеквизитов("Номенклатура, Склад")
    .Записать();

Заключение

Конструктор движений документа в YAXUnit — это мощный инструмент для создания тестовых данных, который значительно упрощает и ускоряет процесс тестирования. Его использование позволяет сосредоточиться на логике тестов, а не на рутинной подготовке данных.