1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-03-03 15:32:37 +02:00
yaxunit/documentation/docs/getting-started/auxiliary-modules.md
2024-03-28 21:18:51 +03:00

5.6 KiB

Модули помощники

При написании тестов не стоит забывать, что вы пишете код, а это значит, что вы можете использовать те же принципы, что при обычной разработке.

Вы можете создавать общие модули и экспортные методы, которые упростят написание тестов для вашего продукта.
Такие как модули создания тестовых данных, настройки мокирования, общих проверок и так далее.
Главное сначала подумать об организации работы с ними, чтобы в будущем было проще находить нужные методы и избежать конфликтов при разработке.

Конструкторы данных

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

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

    Если Поставщик = Неопределено Тогда
        Конструктор.Фикция("Поставщик");
    Иначе
        Конструктор.Установить("Поставщик", Поставщик);
    КонецЕсли

    Возврат Конструктор
        .ТабличнаяЧасть("Товары")
            .ДобавитьСтроку()
            .Установить("Номенклатура", Товар)
            .Фикция("Количество")
            .Фикция("Цена")
        .Записать();
    
КонецФункции

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

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

    Если Поставщик = Неопределено Тогда
        Конструктор.Фикция("Поставщик");
    Иначе
        Конструктор.Установить("Поставщик", Поставщик);
    КонецЕсли

    Возврат Конструктор;
    
КонецФункции

Функция НовоеПоступлениеТовара(Склад, Товар, Поставщик = Неопределено) Экспорт
    Конструктор = КонструкторПоступленияТовара(Склад, Поставщик);

    Возврат Конструктор
        .ТабличнаяЧасть("Товары")
            .ДобавитьСтроку()
            .Установить("Номенклатура", Товар)
            .Фикция("Количество")
            .Фикция("Цена")
        .Записать();
    
КонецФункции

Функция НовоеПоступлениеТовараОтЮрЛица(Склад, Товар) Экспорт
    Поставщик = НовоеЮрЛицо();

    Конструктор = КонструкторПоступленияТовара(Склад, Поставщик);

    Возврат Конструктор
        .ТабличнаяЧасть("Товары")
            .ДобавитьСтроку()
            .Установить("Номенклатура", Товар)
            .Фикция("Количество")
            .Фикция("Цена")
        .Записать();
    
КонецФункции

Функция НовоеПоступлениеТовараОтФизЛица(Склад, Товар) Экспорт
    Поставщик = НовоеФизЛицо();

    Конструктор = КонструкторПоступленияТовара(Склад, Поставщик);

    Возврат Конструктор
        .ТабличнаяЧасть("Товары")
            .ДобавитьСтроку()
            .Установить("Номенклатура", Товар)
            .Фикция("Количество")
            .Фикция("Цена")
        .Записать();
    
КонецФункции