YAxUnit — фреймворк модульного тестирования для 1С

YAxUnit — это стандарт де-факто для модульного (Unit) тестирования в экосистеме 1С:Предприятие. В отличие от Vanessa-Automation, которая фокусируется на пользовательском поведении (UI/BDD), YAxUnit предназначен для проверки программного кода, алгоритмов и внутренней логики конфигурации.

Инструмент вдохновлен популярным фреймворком xUnit (из мира .NET), адаптируя его принципы под специфику 1С.


Установка и компоненты

YAxUnit состоит из двух основных частей, которые работают в тандеме:

  1. Расширение конфигурации (YAxUnit.cfe):
    • Устанавливается в тестируемую базу как обычное расширение.
    • Содержит движок запуска тестов, библиотеку утверждений (Assertions) и графический интерфейс для разработчика.
    • Важно: Не требует снятия конфигурации с поддержки.
  2. Плагин для EDT (1C:Enterprise Development Tools):
    • Позволяет запускать тесты прямо из среды разработки (контекстное меню «Run As…»).
    • Отображает дерево тестов и результаты (зеленый/красный бар) внутри IDE.

Структура теста и синтаксис

Тесты в YAxUnit пишутся на встроенном языке 1С. Обычно создается отдельное расширение или подсистема для тестов, чтобы не засорять основной код.

Основной паттерн: AAA (Arrange, Act, Assert)

Каждый тест — это экспортная процедура в общем модуле или обработке.

text// Пример теста в модуле "Тест_РасчетСкидок"

// [Тест] - аннотация (комментарий для обнаружения)
Процедура ПроверкаРасчетаСкидки_КлиентVIP_Возвращает10Процентов() Экспорт
    
    // 1. Arrange (Подготовка данных)
    СуммаЗаказа = 1000;
    ТипКлиента = "VIP";
    ОжидаемыйРезультат = 100;
    
    // 2. Act (Выполнение действия)
    // Вызов реальной функции из основной конфигурации
    РеальныйРезультат = МодульРасчетов.РассчитатьСкидку(СуммаЗаказа, ТипКлиента);
    
    // 3. Assert (Проверка результата)
    // Используется "Fluent API" — цепочка вызовов, читаемая как предложение
    ЮТТест.ОжидаетЧто(РеальныйРезультат)
        .Равно(ОжидаемыйРезультат)
        .Заполнен(); 

КонецПроцедуры

Ключевые возможности Assertions (Утверждений)

YAxUnit предоставляет богатый API для проверок, который делает код теста понятным:

  • .Равно(Значение) / .НеРавно(Значение)
  • .Истина() / .Ложь()
  • .Заполнен() / .НеЗаполнен()
  • .Содержит(Элемент) (для массивов и списков)
  • .ИмеетТип("СправочникСсылка.Номенклатура")
  • .ВыбрасываетИсключение(ТекстОшибки) — для проверки обработки ошибок.

Запуск тестов и CI/CD

В профессиональной разработке тесты запускаются автоматически при каждом коммите (Merge Request).

Инструмент запуска: vanessa-runner
Это консольная утилита (на OneScript), которая умеет работать с YAxUnit.

Команда для CI (GitLab / Jenkins):

bashvrunner xunit --ibconnection "/S server/base" --path "./tests" --result "./junit-report.xml"
  • Эта команда запустит 1С в режиме выполнения тестов.
  • Соберет результаты всех модулей.
  • Сформирует отчет в формате JUnit XML. Этот формат понимают все CI-системы (GitLab покажет красивый отчет о том, сколько тестов упало).

Продвинутые техники

Mocking (Имитация объектов)

В 1С нет встроенных библиотек типа Moq (как в C#), поэтому в YAxUnit используется «Ручной Мокинг» или Переопределение модулей.

  • Сценарий: Вы тестируете функцию, которая отправляет HTTP-запрос. Вы не хотите делать реальный запрос в тесте.
  • Решение: В тестовом расширении вы создаете общий модуль с тем же именем, что и реальный (например, HTTPКоннектор), и ставите ему более высокий приоритет (аннотация &Вместо). В нем пишите «заглушку», которая просто возвращает «ОК», не делая сетевого вызова.

Data Driven Tests (Параметризованные тесты)

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

textПроцедура ПроверкаСуммы(Слагаемое1, Слагаемое2, ОжидаемаяСумма)
    Результат = МойМодуль.Сложить(Слагаемое1, Слагаемое2);
    ЮТТест.ОжидаетЧто(Результат).Равно(ОжидаемаяСумма);
КонецПроцедуры

Процедура ТестСложения_НаборДанных() Экспорт
    // Список тестовых кейсов
    Параметры = Новый Массив;
    Параметры.Добавить(Новый Структура("А,Б,Итог", 2, 2, 4));
    Параметры.Добавить(Новый Структура("А,Б,Итог", -1, 1, 0));
    
    Для Каждого Стр Из Параметры Цикл
        ПроверкаСуммы(Стр.А, Стр.Б, Стр.Итог);
    КонецЦикла;
КонецПроцедуры

YAxUnit vs Vanessa-Automation: Что выбрать?

В идеальном проекте используются оба инструмента, так как они закрывают разные уровни пирамиды тестирования.

ХарактеристикаYAxUnitVanessa-Automation
УровеньМодульный (Unit)Функциональный / E2E (UI)
Что тестируетКод, функции, расчеты, «кишки» системыКнопки, формы, бизнес-процессы целиком
СкоростьОчень быстро (тысячи тестов за минуты)Медленно (нужно открывать окна, кликать)
Сложность поддержкиНизкая (тесты не зависят от верстки форм)Высокая (интерфейс часто меняется)
Для когоПрограммисты 1СТестировщики, Аналитики, Программисты

Рекомендация: Начинайте внедрение с YAxUnit для критически важных расчетов (расчет зарплаты, скидок, курсов валют), а Vanessa-Automation оставьте для проверки ключевых пользовательских сценариев (создание заказа, печать накладной).

Оцените статью
1С:ФУЛЛСТЕК