Вопрос автоматизации тестирования в 1С становится критически важным при переходе на современный цикл разработки (DevOps). Инструмент xUnitFor1C является классическим решением для реализации модульных (юнит) тестов. В этой статье мы подробно разберем, как подступиться к этому инструменту, как интегрировать его в процесс CI/CD и как правильно организовать тестирование бизнес-логики на примере создания элементов справочника.
Прежде чем мы перейдем к техническим деталям, давайте проанализируем, почему в сообществе 1С часто возникают споры между сторонниками xUnitFor1C и Vanessa Automation. Разберем ключевые отличия, чтобы вы могли сделать осознанный выбор:
Как отмечают эксперты, xUnitFor1C считается более сложным в поддержке («геморно писать и саппортить»), поэтому для новичков часто рекомендуют начинать с Vanessa Automation. Однако для проверки сложных алгоритмов расчета или интеграций юнит-тесты остаются незаменимыми.
Рассмотрим ситуацию: вы используете SourceTree как графический клиент для Git и храните код в Bitbucket. Важно понимать, что сама программа SourceTree не умеет запускать тесты — это лишь интерфейс для работы с репозиторием. Чтобы тесты запускались автоматически, нам нужно настроить цепочку CI/CD (Continuous Integration).
Разберем процесс по шагам:
bitbucket-pipelines.yml. Он дает команду серверу поднять временную базу 1С.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С. Это и есть «тестирование через образец».
Важнейшим правилом при написании юнит-тестов является чистота базы. Если каждый тест будет плодить «мусорные» элементы в справочниках, база быстро станет непригодной для работы. Разберем, как этого избежать.
Программисты используют механизм Транзакций. В начале теста открывается транзакция, выполняются все действия по созданию и проверке объектов, а в конце теста транзакция всегда отменяется (ОтменитьТранзакцию()). Таким образом, данные физически не записываются в базу данных на постоянной основе, и база остается девственно чистой после прогона сотен тестов.
Если ваша команда работает в 1C:EDT, процесс работы с xUnitFor1C значительно упрощается. Существует специальный плагин, который интегрирует запуск тестов непосредственно в среду разработки. Вы можете запустить отдельный метод теста простым нажатием правой кнопки мыши по коду, как это делают Java или C# разработчики. Это избавляет от необходимости постоянно открывать конфигуратор или запускать внешние обработки вручную.
Подводя итог, можно сказать следующее: если вы только начинаете путь в тестировании 1С, попробуйте сначала Vanessa Automation для простых сценариев. Но если вам необходимо обеспечить надежность критически важных расчетов, без xUnitFor1C не обойтись.
Основные советы для старта:
vrunner — он является связующим звеном между 1С и Bitbucket.