/yaxunit

YAXUnit. Расширение для запуска тестов

Primary Language1C EnterpriseApache License 2.0Apache-2.0

YAXUnit. Расширение для запуска тестов

Обсудить в телеграмм чате

Назначение

Самостоятельное расширение для написания и выполнения модульного тестирования.

Возможности

  • YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов
  • Разрабатывалось с оглядкой на JUnit5, пожалуй, лучший фреймворк тестирования
  • Предоставляет движок выполнения тестов
  • Предоставляет утверждения для проверки ожидаемых результатов
  • Тесты могут быть организованы в наборы и выполняться в разных контекстах
  • Позволяет быстрее и проще не только писать, но и читать тесты
  • Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json.
  • Большая часть пользовательского API реализована как текучие выражения
  • Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями
  • Реализован плагин для EDT, который упрощает процесс запуска тестов

Подробнее ознакомиться с функциональностью вы можете изучив документацию.

А для того, что бы начать писать тесты необходимо установить расширение в свою IDE (конфигуратор или EDT).

Пример тестового модуля

Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - ИсполняемыеСценарии и реализовать тесты.

Пример модуля тестов:

#Область СлужебныйПрограммныйИнтерфейс

Процедура ИсполняемыеСценарии() Экспорт
    
    // Регистрация тестов
    ЮТТесты // Регистрация тестов выполняет через модуль регистратор
        .ДобавитьТестовыйНабор("Математические методы")               // Набор - объединение тестов
            .ДобавитьТест("Сложение")                                 // Обязательно при регистрации указываем имя экспортного метода
            .ДобавитьТест("Вычитание", "Вычитание")                   // Также можно указать представление теста
            .ДобавитьТест("Вычитание", "ВычитаниеСервер", , "Сервер") // Контекст исполнения, по умолчанию тест выполняется во всех контекстах модуля
            .ДобавитьКлиентскийТест("УмножениеНаКлиенте")                   // Есть отдельный метод для регистрации клиентских тестов
            .ДобавитьСерверныйТест("ДелениеНаСервере", "Деление на сервер") // Есть отдельный метод для регистрации серверных тестов
        .ДобавитьТестовыйНабор("Строковые методы")
            .ДобавитьТест("СтрНайти")
            .ДобавитьТест("СтрРазделить");

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

#КонецОбласти

#Область Тесты

Процедура Сложение() Экспорт

    // Реализация теста на сложение
    ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
        .ИмеетТип("Число") // Проверим тип
        .Заполнено() // Заполненность проверяемого значения
        .Больше(0) // Сравним с нулем
        .Равно(5); // Проверим ожидаемый результат

    ЮТест.ОжидаетЧто(-8 + 8, "-8 + 8") // Проверим второй вариант
        .Равно(0);

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

Процедура Вычитание() Экспорт

    // Реализация теста на вычитание
    ЮТест.ОжидаетЧто(2 - 3, "2 - 3").ИмеетТип("Число").Заполнено().Меньше(0);

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

#КонецОбласти

#Область События

// Также в тесте можно обрабатывать события выполнения
// Например можно реализовать подготовку и удаление тестовых данных
// Зачистку временных файлов, настройку системы

Процедура ПередВсемиТестами() Экспорт
    // Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
    Сообщить("Запуск тестирования");

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

Процедура ПередТестовымНабором() Экспорт

    // Выполняется перед каждым тестовым набором для каждого контекста выполнения
    Контекст = ЮТест.КонтекстТестовогоНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании
                                                // Контекст живет в рамках контекста выполнения, 
                                                // таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами
    Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());

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

Процедура ПередКаждымТестом() Экспорт

    // Выполняется перед каждым тестом
    Контекст = ЮТест.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании
                                      // Контекст создает перед тестом и уничтожается после его выполнения
                                      // В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить
    Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());

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

Процедура ПослеКаждогоТеста() Экспорт

    // Выполняется после каждого теста
    Контекст = ЮТест.КонтекстТеста();
    Сообщить("Время выполнения теста: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала));

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

Процедура ПослеТестовогоНабора() Экспорт

    // Выполняется после каждого тестового набора для каждого контекста выполнения
    // Применяется для очистки данных и т.д.
    Контекст = ЮТест.КонтекстТестовогоНабора();
    Сообщить("Время выполнения набора: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала));

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

Процедура ПослеВсехТестов() Экспорт

    // Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
    // В этом событии все контексты уже уничтожены
    Сообщить("Тестирование завершено");

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

#КонецОбласти

После запуска тестов модуля в EDT (используя плагин) получаем такой отчет:

Отчет

Запуск

Запуск из EDT

При разработке в EDT процесс запуска тестов можно упростить, установив плагин и настроив конфигурацию запуска, как указано в описании плагина.

Запуск вне EDT

Для запуска тестов без использования EDT необходимо:

  1. Сформировать файл конфигурации запуска вручную, либо воспользоваться формой настройки
  2. Запустить 1С:Предприятие с параметром RunUnitTests=ПутьКФайлуКонфигурации.json.

Благодарности

Приносим благодарность всему open-source сообществу 1с за идеи и мотивацию.

Особая благодарность авторам и контрибьютерам проектов


Лицензия

Copyright © 2022 BIA-Technologies Limited Liability Company

Distributed under the Apache License, Version 2.0