Зависимости
Предположим у вас есть набор серверных тестов, которые требуют наличия файлов хранящихся в репозитории на клиенте. Для выполнения этих тестов вам необходимо передать файлы на сервер перед выполнением. В дополнение, передачу необходимо выполнить только один раз и только если выполняются тесты, для которых файлы нужны.
В решении этой проблемы может помочь механизм зависимостей, который:
- Позволяет указывать зависимости тестов
- Для разрешения зависимостей используется код 1с, вызываемый с клиента
- Разрешение зависимостей выполняется единожды и результат может быть переиспользован в различных тестах
- Если по какой-то причине не удалось разрешить зависимость, то зависимые тесты не будут выполнятся.
- YAxUnit на данный момент реализует зависимость от файлов проекта, которая проверяет наличие нужных файлов и переносит их на сервер.
Например, вам необходимо проверить, что файл .gitignore
содержит исключение для ConfigDumpInfo.xml
.
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("ПроверитьДанныеGitIgnore")
.ЗависитОт().ФайлыПроекта(".gitignore"); // Указываем зависимость
КонецПроцедуры
Процедура ПроверитьДанныеGitIgnore() Экспорт
ПолноеИмяФайла = ЮТест.Зависимость(ЮТЗависимости.ФайлыПроекта(".gitignore")).ПолноеИмя; // Получаем результат работы зависимости
ЮТест.ОжидаетЧто(ЮТФайлы.Существует(ПолноеИмяФайла), "Файл каталога проекта не существует")
.ЭтоИстина();
Данные = ЮТОбщий.ДанныеТекстовогоФайла(ПолноеИмяФайла);
ЮТест.ОжидаетЧто(Данные, "Содержимое файла")
.Содержит("ConfigDumpInfo.xml");
КонецПроцедуры
В примере движок проверит наличие файла .gitignore
в каталоге проекта и перенесет его на сервер и сохранит в контексте путь к у файлу (причем, для сервера и клиент будут сохранены разные пути).
Другой пример, в своих тестах мы добавили зависимость для создания ФабрикаXDTO
из файлов:
Пр оцедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("ВыполнитьОбмен")
.ЗависитОт().ФабрикаСбора();
КонецПроцедуры
Процедура ВыполнитьОбмен() Экспорт
Фабрика = ЮТест.Зависимость(ЮТЗависимости.ФабрикаСбора()).Фабрика; // Получаем результат работы зависимости
...
КонецПроцедуры
Здесь для тестирования различных обменов мы создаем, на основании файлов хранящихся в репозитории, фабрику XDTO. При этом фабрика создается только один раз и доступна во всех серверных тестах.
Зачем нужны зависимости
Основной целью создания зависимостей было предоставление единого механизма для работы с "тяжелыми" и часто используемыми зависимостями тестов. В большинстве случаев достаточно создать общий метод и вызывать его в тестах или событиях и таким образом готовить контекст теста. Но в некоторых случаях, таких как использование "клиентских" файлов в серверных тестах, этот вариант не подходит. Чтобы избежать костылей в подобных ситуациях и были добавлены зависимости.
Принцип работы
- В своих тестах вы указываете зависимости для тестов (наборов или модулей).
- При запуске, YAxUnit анализирует какие тесты вы хотите запустить и собирает по ним реестр зависимостей.
- Движок обрабатывает реестр зависимостей:
- вызывает методы реализующие зависимости
- сохраняет признак успешности обработки зависимости
- сохраняет данные, которые сформировала зависимость.
- Тесты связанные с неразрешенными зависимостями переводятся в статус "Пропущен" и не вызываются при прогоне.
- После этого происходит запуск тестов.
- Любой тест может обратиться к результатам обработки зависимостей используя
ЮТест.Зависимость
Доступные виды зависимостей
Зависимость ФайлыПроекта
Зависимость тестов от файлов проекта. Если в каталоге проекта нет этих файлов, то тест не будет выполнен.
Каталог проекта задается в параметрах запуска - projectPath
.
Эта зависимость переносит файлы на сервер, чтобы они были доступны в серверных тестах и сохраняет в контексте путь к перенесенному файлу/каталогу (для клиентского теста будет хранится путь к файлам на клиенте).
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("РаботаСФайлами")
.ЗависитОт().ФайлыПроекта("ОтносительныеПуть"); // Указываем зависимость
КонецПроцедуры
Процедура РаботаСФайлами() Экспорт
КаталогСФайлами = ЮТест.Зависимость(ЮТЗависимости.ФайлыПроекта("ОтносительныеПуть")).ПолноеИмя;
...
КонецПроцедуры
Зависимость ФабрикаXDTO
Зависимость тестов от фабрики XDTO, созданной на основании файлов проекта.
Создает на сервере из файлов фабрику и сохраняет ее в контекст.
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
..ДобавитьСерверныйТест("ФабрикаJUnit").ЗависитОт().ФабрикаXDTO("fixtures/junit")
КонецПроцедуры
Процедура ФабрикаJUnit() Экспорт
Фабрика = ЮТест.Зависимость(ЮТЗависимости.ФабрикаXDTO("fixtures/junit")).Фабрика;
ТестовыйНабор = ЮТест.Данные().КонструкторОбъектаXDTO("testsuite", "http://junit.org/schema", Фабрика)
.ФикцияНезаполненных()
.ДанныеОбъекта();
ЮТест.ОжидаетЧто(ТестовыйНабор)
.ИмеетТип(Тип("ОбъектXDTO"))
.Существует()
.ИмеетСвойство("properties")
.ИмеетСвойство("testcase")
.ИмеетСвойство("failures");
КонецПроцедуры