Как начать работу с xUnitFor1C и настроить автоматическое тестирование через Bitbucket?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Вопрос автоматизации тестирования в 1С становится критически важным при переходе на современный цикл разработки (DevOps). Инструмент xUnitFor1C является классическим решением для реализации модульных (юнит) тестов. В этой статье мы подробно разберем, как подступиться к этому инструменту, как интегрировать его в процесс CI/CD и как правильно организовать тестирование бизнес-логики на примере создания элементов справочника.

Понимаем разницу между модульным и сценарным тестированием

Прежде чем мы перейдем к техническим деталям, давайте проанализируем, почему в сообществе 1С часто возникают споры между сторонниками xUnitFor1C и Vanessa Automation. Разберем ключевые отличия, чтобы вы могли сделать осознанный выбор:

  1. xUnitFor1C (Модульное тестирование): Предназначено для проверки конкретных экспортных функций и процедур в программном коде. Это работа «под капотом». Тесты пишутся на языке 1С, они очень быстрые, но требуют высокой квалификации программиста и поддержки кода тестов при каждом изменении логики.
  2. Vanessa Automation (Сценарное тестирование): Имитирует действия пользователя в интерфейсе (нажатие кнопок, заполнение полей). Такие тесты проще в написании («накликал и записал»), но они работают медленнее и сильнее зависят от изменений в дизайне форм.

Как отмечают эксперты, xUnitFor1C считается более сложным в поддержке («геморно писать и саппортить»), поэтому для новичков часто рекомендуют начинать с Vanessa Automation. Однако для проверки сложных алгоритмов расчета или интеграций юнит-тесты остаются незаменимыми.

Интеграция с Git (SourceTree) и Bitbucket

Рассмотрим ситуацию: вы используете SourceTree как графический клиент для Git и храните код в Bitbucket. Важно понимать, что сама программа SourceTree не умеет запускать тесты — это лишь интерфейс для работы с репозиторием. Чтобы тесты запускались автоматически, нам нужно настроить цепочку CI/CD (Continuous Integration).

Разберем процесс по шагам:

  1. Локальная работа: Программист пишет код и тесты в 1С или EDT, фиксирует изменения (Commit) и отправляет их в Bitbucket (Push).
  2. Pipeline (Bitbucket Pipelines): На стороне Bitbucket настраивается специальный файл конфигурации bitbucket-pipelines.yml. Он дает команду серверу поднять временную базу 1С.
  3. Использование Vrunner: Для запуска xUnitFor1C из командной строки используется утилита Vanessa-runner (vrunner). Она позволяет передать параметры запуска 1С так, чтобы обработка тестов выполнилась автоматически и закрыла сеанс.

Пример команды для запуска тестов через консоль может выглядеть следующим образом:


vrunner xunit --tests "ПутьКФайлуСТестами.epf" --ibconnection "/F./build/db" --out "./build/report.xml"

Здесь параметр --out крайне важен: он формирует отчет в формате JUnit, который Bitbucket умеет считывать и отображать в виде красивых графиков прохождения тестов.

Метод «Тестирование через образец исходных данных»

Выясним, как реализовать задачу создания нового элемента справочника через эталонные данные. В xUnitFor1C этот процесс строится на трех этапах: Setup (подготовка), Run (выполнение) и Assert (проверка).

Рассмотрим подробнее, как подготовить окружение. Если мы создаем элемент справочника «Договоры», нам обязательно нужен «Контрагент». Мы не можем закладываться на то, что контрагент уже есть в базе. Поэтому в начале теста мы создаем его программно или загружаем из макета.

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


Процедура Тест_СозданиеНовогоЭлементаСправочника() Экспорт
    
    // 1. Подготовка данных (Setup)
    НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйОбъект.Наименование = "Тестовый товар";
    НовыйОбъект.Артикул = "TEST-001";
    
    // 2. Действие (Run)
    Попытка
        НовыйОбъект.Записать();
    Исключение
        ЮТест.Провалить("Не удалось записать объект: " + ОписаниеОшибки());
    КонецПопытки;
    
    // 3. Проверка (Assert)
    // Используем механизмы xUnit для сверки реквизитов
    ЮТест.ОжидаетЧто(НовыйОбъект.Ссылка).Заполнено();
    ЮТест.ОжидаетЧто(НовыйОбъект.Наименование).Равно("Тестовый товар");
    
КонецПроцедуры

Проанализируем ситуацию, когда данных много. Вместо ручного заполнения каждого реквизита в коде, профессионалы используют Макеты. Вы можете сохранить эталонный объект в формате JSON или XML, приложить его к обработке с тестами и в коде теста просто десериализовать его в объект 1С. Это и есть «тестирование через образец».

Автоматическая очистка данных и транзакции

Важнейшим правилом при написании юнит-тестов является чистота базы. Если каждый тест будет плодить «мусорные» элементы в справочниках, база быстро станет непригодной для работы. Разберем, как этого избежать.

Программисты используют механизм Транзакций. В начале теста открывается транзакция, выполняются все действия по созданию и проверке объектов, а в конце теста транзакция всегда отменяется (ОтменитьТранзакцию()). Таким образом, данные физически не записываются в базу данных на постоянной основе, и база остается девственно чистой после прогона сотен тестов.

Использование плагина для EDT

Если ваша команда работает в 1C:EDT, процесс работы с xUnitFor1C значительно упрощается. Существует специальный плагин, который интегрирует запуск тестов непосредственно в среду разработки. Вы можете запустить отдельный метод теста простым нажатием правой кнопки мыши по коду, как это делают Java или C# разработчики. Это избавляет от необходимости постоянно открывать конфигуратор или запускать внешние обработки вручную.

Резюме и рекомендации

Подводя итог, можно сказать следующее: если вы только начинаете путь в тестировании 1С, попробуйте сначала Vanessa Automation для простых сценариев. Но если вам необходимо обеспечить надежность критически важных расчетов, без xUnitFor1C не обойтись.

Основные советы для старта:

  1. Изучите документацию в официальном репозитории проекта на GitHub.
  2. Освойте инструмент vrunner — он является связующим звеном между 1С и Bitbucket.
  3. Всегда используйте транзакции в тестах, чтобы не засорять базу данных.
  4. Начните с малого: покройте тестами одну самую важную функцию вашей системы, а затем наращивайте объем проверок.
← На главную