Конструктор объекта
Конструктор объекта является ключевым инструментом для создания тестовых данных в контексте фреймворка 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С. Его текучий интерфейс позволяет легко настраивать объекты, табличные части и реквизиты, а также автоматически генерировать фиктивные значения. Используйте этот класс для упрощения процесса написания тестов и повышения их качества.