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

Конструктор объекта

Конструктор объекта является ключевым инструментом для создания тестовых данных в контексте фреймворка YAxUnit. Он реализован как текучий интерфейс, что позволяет гибко и удобно настраивать объекты, табличные части и реквизиты. Доступ к нему осуществляется через фабрику ЮТест.Данные().КонструкторОбъекта(<Вид метаданных>).

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

Основные возможности включают:

  • Создание ссылочных объектов: Поддерживает создание справочников, документов, ПВХ и других ссылочных объектов.
  • Создание записей регистров сведений: Позволяет создавать записи регистров сведений, не подчиненных регистратору.
  • Компактное заполнение объектов: Позволяет заполнять объекты в более компактной форме, что упрощает написание тестов.
  • Гибкое управление данными: Позволяет записывать объекты с признаком ОбменДанными.Загрузка = Истина, устанавливать уникальные идентификаторы ссылок, а также добавлять дополнительные свойства объектам.
  • Методы записи и проведения: Поддерживает запись и проведение документов.
  • Генерация фиктивных значений для реквизитов. Устанавливает случайно сгенерированные значения реквизитов. Это позволяет сосредоточиться на важных для теста реквизитах и экономит время на генерацию ненужных значений.
  • Работа с клиентом: Умеет создавать данные с клиента и удалять их по окончании теста.
  • Создание объектов без записи: Поддерживает создание объектов без их записи в базу данных, что полезно для проверки данных в тестах.
  • Обработка ошибок: При возникновении ошибок оборачивает их в более понятные человеку описания.

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

Создание нового элемента справочника "Контрагенты"

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

Сообщить("Создан контрагент: " + Контрагент.Наименование);

Создание и проведение документа "Приходный ордер"

ПриходныйОрдер = ЮТест.Данные().КонструкторОбъекта("Документ.ПриходныйОрдер")
.ФикцияОбязательныхПолей() // Автоматически заполняем обязательные поля
.Установить("Контрагент", Справочники.Контрагенты.НайтиПоКоду("00001"))
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Установить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("00001"))
.Установить("Количество", 10)
.Провести(Истина); // Проводим документ и возвращаем объект

Сообщить("Проведен документ: " + ПриходныйОрдер.Номер);

Создание записи в регистре сведений "Цены номенклатуры"

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

Создание нового элемента ПВХ "Типы контрагентов"

ТипКонтрагента = ЮТест.Данные().КонструкторОбъекта("ПланВидовХарактеристик.ТипыКонтрагентов")
.ФикцияОбязательныхПолей() // Автоматически заполняем обязательные поля
.Установить("Код", "00001")
.Установить("Наименование", "Тестовый тип контрагента")
.Записать();

Сообщить("Создан тип контрагента: " + ТипКонтрагента.Наименование);

Создание объекта "Номенклатура" без записи в базу

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

Сообщить("Создана номенклатура: " + Номенклатура.Наименование);

Автоматическая генерация значений для документа "Расходный ордер"

РасходныйОрдер = ЮТест.Данные().КонструкторОбъекта("Документ.РасходныйОрдер")
.ФикцияОбязательныхПолей() // Автоматически заполняем обязательные поля
.Фикция("Контрагент") // Генерируем фиктивное значение для контрагента
.Фикция("Сумма", Неопределено, Новый ОписаниеТипов(Тип("Число"), Новый КвалификаторыЧисла(10, 2))) // Генерируем фиктивное значение для суммы
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Фикция("Номенклатура") // Генерируем фиктивное значение для номенклатуры
.Фикция("Количество") // Генерируем фиктивное значение для количества
.Записать();

Сообщить("Создан документ: " + РасходныйОрдер.Номер);

Создание объекта "Контрагент" с заданным GUID

Контрагент = ЮТест.Данные().КонструкторОбъекта("Справочник.Контрагенты")
.ФикцияОбязательныхПолей() // Автоматически заполняем обязательные поля
.УстановитьСсылкуНового("00000000-0000-0000-0000-000000000001") // Устанавливаем GUID
.Установить("Наименование", "Контрагент с заданным GUID")
.Записать();

Сообщить("Создан контрагент с GUID: " + Контрагент.Наименование);

Методы

Заполнение объекта

Установить(ИмяРеквизита, Значение)

Устанавливает значение реквизита создаваемого объекта. Если метод вызывается после вызова ТабличнаяЧасть, то устанавливается значение реквизита строки табличной части.

  • Параметры:

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

    • Конструктор для дальнейшей настройки.

Пример:

ЮТест.Данные().КонструкторОбъекта("Документ.ПриходныйОрдер")
.Установить("Номер", "0001")
.Установить("Дата", Дата(2023, 10, 01))
.Записать();

УстановитьРеквизиты(ЗначенияРеквизитов)

Устанавливает значения нескольких реквизитов создаваемого объекта. Если метод вызывается после вызова ТабличнаяЧасть, то устанавливаются значения реквизитов строки табличной части.

  • Параметры:

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

    • Конструктор для дальнейшей настройки.

Пример:

Значения = Новый Структура;
Значения.Вставить("Номер", "0002");
Значения.Вставить("Дата", Дата(2023, 10, 02));
Значения.Вставить("Контрагент", Справочники.Контрагенты.НайтиПоКоду("00001"));

ЮТест.Данные().КонструкторОбъекта("Документ.ПриходныйОрдер")
.УстановитьРеквизиты(Значения)
.Записать();

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

Устанавливает фиктивное значение реквизита создаваемого объекта. Фиктивное значение генерируется на основе типа реквизита:

  • Для примитивных типов — случайное значение.

  • Для ссылочных типов — новый объект.

  • Для перечислений — случайное значение перечисления.

  • Параметры:

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

    • Конструктор для дальнейшей настройки.

Пример:

ЮТест.Данные().КонструкторОбъекта("Документ.ПриходныйОрдер")
.Фикция("Контрагент")
.Фикция("Сумма", Неопределено, Новый ОписаниеТипов(Тип("Число"), Новый КвалификаторыЧисла(10, 2)))
.Записать();

ФикцияРеквизитов(ИменаРеквизитов)

Устанавливает фиктивные значения для нескольких реквизитов создаваемого объекта.

  • Параметры:

    • ИменаРеквизитов (Строка, Массив из Строка): Имена реквизитов объекта или табличной части.
  • Возвращаемое значение:

    • Конструктор для дальнейшей настройки.

Пример:

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

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

Автоматически заполняет фиктивными значениями все обязательные поля объекта, определенные в метаданных (с признаком "Проверка заполнения = Выдавать ошибку").

  • Возвращаемое значение:
    • Конструктор для дальнейшей настройки.

Пример:

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

ТабличнаяЧасть(ИмяТабличнойЧасти)

Переключает конструктор на работу с указанной табличной частью объекта.

  • Параметры:

    • ИмяТабличнойЧасти (Строка): Имя табличной части.
  • Возвращаемое значение:

    • Конструктор для дальнейшей настройки.

Пример:

ЮТест.Данные().КонструкторОбъекта("Документ.ПриходныйОрдер")
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Установить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("00001"))
.Установить("Количество", 10)
.Записать();

ДобавитьСтроку(ЗначенияРеквизитов)

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

  • Параметры:

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

    • Конструктор для дальнейшей настройки.

Пример:

ЮТест.Данные().КонструкторОбъекта("Документ.ПриходныйОрдер")
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Установить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("00001"))
.Установить("Количество", 5)
.ДобавитьСтроку()
.Установить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("00002"))
.Установить("Количество", 3)
.Записать();

Запись


Записать(ВернутьОбъект, ОбменДаннымиЗагрузка)

Создает и записывает объект в базу данных. Возвращает объект или ссылку на него.

  • Параметры:

    • ВернутьОбъект (Булево): Если Истина, возвращает объект, иначе — ссылку.
    • ОбменДаннымиЗагрузка (Булево): Если Истина, записывает объект с признаком ОбменДанными.Загрузка = Истина.
  • Возвращаемое значение:

    • Произвольный: Созданный объект или ссылка на него.

Пример:

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

Провести(ВернутьОбъект)

Создает, записывает и проводит документ. Возвращает объект или ссылку на него.

  • Параметры:

    • ВернутьОбъект (Булево): Если Истина, возвращает объект, иначе — ссылку.
  • Возвращаемое значение:

    • Произвольный: Созданный объект или ссылка на него.

Пример:

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

ДобавитьЗапись(ОбменДаннымиЗагрузка)

Записывает новый объект в базу данных, но в отличие от методов Записать или Провести возвращает конструктор, что позволяет продолжить работу по созданию тестовых данных. Этот метод полезен, если требуется записать объект и продолжить настройку других объектов или табличных частей.

  • Параметры:

    • ОбменДаннымиЗагрузка (Булево): Если Истина, записывает объект с признаком ОбменДанными.Загрузка = Истина.
  • Важно: После создания объекта данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов. Если нужно создать новый объект, необходимо повторно инициировать конструктор.

  • Возвращаемое значение:

    • Конструктор для дальнейшей настройки.

Пример:

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

Этот метод позволяет гибко управлять процессом создания и записи объектов, сохраняя возможность продолжить настройку тестовых данных.


НовыйОбъект()

Создает новый объект, но не записывает его в базу данных. Этот метод полезен, если требуется получить объект для дальнейшей работы с ним в тестах, не сохраняя его в базе.

  • Важно: После создания объекта данные не очищаются, поэтому многократный вызов метода создаст множество одинаковых объектов. Если нужно создать новый объект, необходимо повторно инициировать конструктор.

  • Возвращаемое значение:

    • Произвольный: Созданный объект.

Пример:

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

// Далее можно работать с объектом, не записывая его в базу
Сообщить("Номер документа: " + Объект.Номер);

Дополнительные возможности


УстановитьСсылкуНового(Значение)

Устанавливает уникальный идентификатор ссылки для создаваемого объекта. Этот метод полезен, если требуется явно задать идентификатор объекта, например, для создания объекта с заранее известным GUID.

  • Параметры:

    • Значение (УникальныйИдентификатор, Строка): Уникальный идентификатор ссылки нового объекта. Может быть представлен как строка или объект типа УникальныйИдентификатор.
  • Возвращаемое значение:

    • Конструктор для дальнейшей настройки.

Пример:

ЮТест.Данные().КонструкторОбъекта("Справочник.Контрагенты")
.УстановитьСсылкуНового("00000000-0000-0000-0000-000000000001")
.ФикцияОбязательныхПолей()
.Записать();

УстановитьДополнительноеСвойство(ИмяСвойства, Значение)

Устанавливает дополнительное свойство для создаваемого объекта. Этот метод позволяет добавлять произвольные данные, которые не являются реквизитами объекта, но могут быть полезны для тестов.

  • Параметры:

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

    • Конструктор для дальнейшей настройки.

Пример:

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

Объект()

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

  • Возвращаемое значение:
    • Конструктор для дальнейшей настройки.

Пример:

ЮТест.Данные().КонструкторОбъекта("Документ.ПриходныйОрдер")
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Установить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("00001"))
.Объект()
.Установить("Контрагент", Справочники.Контрагенты.НайтиПоКоду("00001"))
.Записать();

ДанныеСтроки()

Возвращает данные текущей строки табличной части объекта. Если конструктор настроен на заполнение объекта, возвращается Неопределено.

  • Возвращаемое значение:
    • Структура: Данные строки табличной части.
    • Неопределено: Если заполняется объект.

Пример:

ЮТест.Данные().КонструкторОбъекта("Документ.ПриходныйОрдер")
.ТабличнаяЧасть("Товары")
.ДобавитьСтроку()
.Установить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("00001"))
.Установить("Количество", 10)
.ДанныеСтроки(); // Возвращает данные строки табличной части

ДанныеОбъекта()

Возвращает данные создаваемого объекта в виде структуры. Этот метод полезен для проверки или использования данных объекта в тестах.

  • Возвращаемое значение:
    • Структура: Данные объекта.

Пример:

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

Сообщить("Номер документа: " + Данные.Номер);

Заключение

Конструктор объекта предоставляет мощный и гибкий инструмент для создания тестовых данных в 1С. Его текучий интерфейс позволяет легко настраивать объекты, табличные части и реквизиты, а также автоматически генерировать фиктивные значения. Используйте этот класс для упрощения процесса написания тестов и повышения их качества.