2020-10-12 10:00:55 +03:00
# YAXUnit. Расширение для запуска тестов
2022-10-04 16:39:36 +03:00
- [Назначение ](#назначение )
- [Возможности ](#возможности )
- [Пример тестового модуля ](#пример-тестового-модуля )
- [Запуск ](#запуск )
- [Запуск из EDT ](#запуск-из-edt )
2023-01-31 19:09:06 +03:00
- [Запуск вне EDT ](#запуск-вне-edt )
2022-10-04 16:39:36 +03:00
- [Благодарности ](#благодарности )
- [Лицензия ](#лицензия )
2020-10-12 10:00:55 +03:00
2023-01-24 09:07:57 +03:00
Обсудить в [телеграмм чате ](https://t.me/BIAOpenTools/12 )
2020-10-12 10:00:55 +03:00
## Назначение
Самостоятельное расширение для написания и выполнения модульного тестирования.
### Возможности
2022-10-04 16:39:36 +03:00
- YAXUnit - это расширение с открытым исходным кодом, которое используется для написания и выполнения тестов
- Разрабатывалось с оглядкой на JUnit5, пожалуй, лучший фреймворк тестирования
- Предоставляет движок выполнения тестов
- Предоставляет утверждения для проверки ожидаемых результатов
- Тесты могут быть организованы в наборы и выполняться в разных контекстах
- Позволяет быстрее и проще не только писать, но и читать тесты
- Результаты тестирования могут быть сохранены в отчет, на текущий момент jUnit и json.
- Большая часть пользовательского API реализована как [текучие выражения ](https://ru.wikipedia.org/wiki/Fluent_interface )
- Предусмотрена возможность расширения функциональности, можно регистрировать свои форматы отчетов, добавлять модули с утверждениями
2022-10-10 08:46:02 +03:00
- Реализован [плагин для EDT ](https://github.com/bia-technologies/edt-test-runner ), который упрощает процесс запуска тестов
2020-10-12 10:00:55 +03:00
2022-10-04 16:39:36 +03:00
Подробнее ознакомиться с функциональностью вы можете изучив [документацию ](docs/api-topic.md ).
2020-10-12 10:00:55 +03:00
2022-10-04 16:39:36 +03:00
А для того, что бы начать писать тесты необходимо [установить расширение ](docs/install.md ) в свою IDE (конфигуратор или EDT).
2022-11-11 23:53:20 +03:00
2020-10-12 10:00:55 +03:00
## Пример тестового модуля
Для создания теста нужно в расширении (в отдельном или в том же) добавить модуль, содержащий экспортный метод регистрации - `ИсполняемыеСценарии` и реализовать тесты.
Пример модуля тестов:
```bsl
2022-10-04 16:39:36 +03:00
#Область СлужебныйПрограммныйИнтерфейс
Процедура ИсполняемыеСценарии() Экспорт
// Регистрация тестов
ЮТТесты // Регистрация тестов выполняет через модуль регистратор
.ДобавитьТестовыйНабор("Математические методы") // Набор - объединение тестов
.ДобавитьТест("Сложение") // Обязательно при регистрации указываем имя экспортного метода
.ДобавитьТест("Вычитание", "Вычитание") // Также можно указать представление теста
.ДобавитьТест("Вычитание", "ВычитаниеСервер", , "Сервер") // Контекст исполнения, по умолчанию тест выполняется во всех контекстах модуля
.ДобавитьКлиентскийТест("УмножениеНаКлиенте") // Есть отдельный метод для регистрации клиентских тестов
.ДобавитьСерверныйТест("ДелениеНаСервере", "Деление на сервер") // Есть отдельный метод для регистрации серверных тестов
.ДобавитьТестовыйНабор("Строковые методы")
.ДобавитьТест("СтрНайти")
.ДобавитьТест("СтрРазделить");
2020-10-12 10:00:55 +03:00
КонецПроцедуры
#КонецОбласти
#Область Тесты
Процедура Сложение() Экспорт
// Реализация теста на сложение
2022-10-04 16:39:36 +03:00
ЮТест.ОжидаетЧто(2 + 3, "2 + 3") // Используя модуль утверждений установим проверяемое значение и пояснение
2020-10-12 10:00:55 +03:00
.ИмеетТип("Число") // Проверим тип
.Заполнено() // Заполненность проверяемого значения
.Больше(0) // Сравним с нулем
.Равно(5); // Проверим ожидаемый результат
2022-10-04 16:39:36 +03:00
ЮТест.ОжидаетЧто(-8 + 8, "-8 + 8") // Проверим второй вариант
2020-10-12 10:00:55 +03:00
.Равно(0);
КонецПроцедуры
Процедура Вычитание() Экспорт
// Реализация теста на вычитание
2022-10-04 16:39:36 +03:00
ЮТест.ОжидаетЧто(2 - 3, "2 - 3").ИмеетТип("Число").Заполнено().Меньше(0);
2020-10-12 10:00:55 +03:00
КонецПроцедуры
#КонецОбласти
#Область События
// Также в тесте можно обрабатывать события выполнения
// Например можно реализовать подготовку и удаление тестовых данных
// Зачистку временных файлов, настройку системы
Процедура ПередВсемиТестами() Экспорт
// Выполняется перед запуском всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
Сообщить("Запуск тестирования");
КонецПроцедуры
Процедура ПередТестовымНабором() Экспорт
// Выполняется перед каждым тестовым набором для каждого контекста выполнения
2022-10-04 16:39:36 +03:00
Контекст = ЮТест.КонтекстТестовогоНабора(); // Контекст набора служит для хранения любых данных, нужных при тестировании
// Контекст живет в рамках контекста выполнения,
// таки образом, через контекст нельзя передавать данные между серверными и клиентскими тестами
2020-10-12 10:00:55 +03:00
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
КонецПроцедуры
2022-10-04 16:39:36 +03:00
Процедура ПередКаждымТестом() Экспорт
2020-10-12 10:00:55 +03:00
// Выполняется перед каждым тестом
2022-10-04 16:39:36 +03:00
Контекст = ЮТест.КонтекстТеста(); // Контекст теста служит для хранения любых данных, нужных при тестировании
// Контекст создает перед тестом и уничтожается после его выполнения
// В контекст например, можно помещать созданные в процессе данные, что бы потом их удалить
2020-10-12 10:00:55 +03:00
Контекст.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах());
КонецПроцедуры
2022-10-04 16:39:36 +03:00
Процедура ПослеКаждогоТеста() Экспорт
2020-10-12 10:00:55 +03:00
// Выполняется после каждого теста
2022-10-04 16:39:36 +03:00
Контекст = ЮТест.КонтекстТеста();
2022-10-28 10:04:54 +03:00
Сообщить("Время выполнения теста: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала));
2020-10-12 10:00:55 +03:00
КонецПроцедуры
Процедура ПослеТестовогоНабора() Экспорт
// Выполняется после каждого тестового набора для каждого контекста выполнения
// Применяется для очистки данных и т.д.
2022-10-04 16:39:36 +03:00
Контекст = ЮТест.КонтекстТестовогоНабора();
2022-10-28 10:04:54 +03:00
Сообщить("Время выполнения набора: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - Контекст.ВремяНачала));
2020-10-12 10:00:55 +03:00
КонецПроцедуры
Процедура ПослеВсехТестов() Экспорт
// Выполняется после выполнения всех тестов контекста, те если есть тесты и на клиенте и на сервер, то метод будет выполнен 2 раза
// В этом событии все контексты уже уничтожены
2022-10-04 16:39:36 +03:00
Сообщить("Тестирование завершено");
2020-10-12 10:00:55 +03:00
КонецПроцедуры
#КонецОбласти
```
2023-01-31 19:09:06 +03:00
После запуска тестов модуля в EDT (используя [плагин ](https://github.com/bia-technologies/edt-test-runner )) получаем такой отчет:
2020-10-12 10:00:55 +03:00
![Отчет ](docs/images/report.PNG )
## Запуск
### Запуск из EDT
2022-10-10 18:54:59 +03:00
При разработке в EDT процесс запуска тестов можно упростить, установив [плагин ](https://github.com/bia-technologies/edt-test-runner )
2020-10-12 10:00:55 +03:00
и настроив конфигурацию запуска, как указано в описании плагина.
2023-01-31 19:09:06 +03:00
### Запуск вне EDT
Для запуска тестов без использования EDT необходимо:
1. Сформировать файл конфигурации запуска [вручную ](docs/run.md ), либо воспользоваться [формой настройки ](docs/yaxunit-ui.md )
2. [Запустить 1С:Предприятие ](docs/run.md ) с параметром `RunUnitTests=ПутьКФайлуКонфигурации.json` .
2020-10-12 10:00:55 +03:00
## Благодарности
Приносим благодарность всему [open-source сообществу 1с ](https://github.com/topics/1c-enterprise ) за идеи и мотивацию.
Особая благодарность авторам и контрибьютерам проектов
2022-11-11 23:53:20 +03:00
- [xUnitFor1C ](https://github.com/xDrivenDevelopment/xUnitFor1C/graphs/contributors )
- [vanessa-automation ](https://github.com/Pr-Mex/vanessa-automation/graphs/contributors )
- [add ](https://github.com/vanessa-opensource/add/graphs/contributors )
2020-10-12 10:00:55 +03:00
---
## Лицензия
Copyright © 2022 [BIA-Technologies Limited Liability Company ](http://bia-tech.ru/ )
2022-10-10 18:54:59 +03:00
Distributed under the [Apache License, Version 2.0 ](http://www.apache.org/licenses/LICENSE-2.0.html )