Перейти к основному содержимому

Зависимости

Предположим у вас есть набор серверных тестов, которые требуют наличия файлов хранящихся в репозитории на клиенте. Для выполнения этих тестов вам необходимо передать файлы на сервер перед выполнением. В дополнение, передачу необходимо выполнить только один раз и только если выполняются тесты, для которых файлы нужны.

В решении этой проблемы может помочь механизм зависимостей, который:

  • Позволяет указывать зависимости тестов
  • Для разрешения зависимостей используется код 1с, вызываемый с клиента
  • Разрешение зависимостей выполняется единожды и результат может быть переиспользован в различных тестах
  • Если по какой-то причине не удалось разрешить зависимость, то зависимые тесты не будут выполнятся.
  • YAxUnit на данный момент реализует зависимость от файлов проекта, которая проверяет наличие нужных файлов и переносит их на сервер.

Например, вам необходимо проверить, что файл .gitignore содержит исключение для ConfigDumpInfo.xml.

Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("ПроверитьДанныеGitIgnore")
.ЗависитОт().ФайлыПроекта(".gitignore"); // Указываем зависимость
КонецПроцедуры

Процедура ПроверитьДанныеGitIgnore() Экспорт

ПолноеИмяФайла = ЮТест.Зависимость(ЮТЗависимости.ФайлыПроекта(".gitignore")).ПолноеИмя; // Получаем результат работы зависимости

ЮТест.ОжидаетЧто(ЮТФайлы.Существует(ПолноеИмяФайла), "Файл каталога проекта не существует")
.ЭтоИстина();

Данные = ЮТОбщий.ДанныеТекстовогоФайла(ПолноеИмяФайла);
ЮТест.ОжидаетЧто(Данные, "Содержимое файла")
.Содержит("ConfigDumpInfo.xml");

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

В примере движок проверит наличие файла .gitignore в каталоге проекта и перенесет его на сервер и сохранит в контексте путь к у файлу (причем, для сервера и клиент будут сохранены разные пути).

Другой пример, в своих тестах мы добавили зависимость для создания ФабрикаXDTO из файлов:

Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("ВыполнитьОбмен")
.ЗависитОт().ФабрикаСбора();
КонецПроцедуры

Процедура ВыполнитьОбмен() Экспорт

Фабрика = ЮТест.Зависимость(ЮТЗависимости.ФабрикаСбора()).Фабрика; // Получаем результат работы зависимости
...

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

Здесь для тестирования различных обменов мы создаем, на основании файлов хранящихся в репозитории, фабрику XDTO. При этом фабрика создается только один раз и доступна во всех серверных тестах.

Зачем нужны зависимости

Основной целью создания зависимостей было предоставление единого механизма для работы с "тяжелыми" и часто используемыми зависимостями тестов. В большинстве случаев достаточно создать общий метод и вызывать его в тестах или событиях и таким образом готовить контекст теста. Но в некоторых случаях, таких как использование "клиентских" файлов в серверных тестах, этот вариант не подходит. Чтобы избежать костылей в подобных ситуациях и были добавлены зависимости.

Принцип работы

  1. В своих тестах вы указываете зависимости для тестов (наборов или модулей).
  2. При запуске, YAxUnit анализирует какие тесты вы хотите запустить и собирает по ним реестр зависимостей.
  3. Движок обрабатывает реестр зависимостей:
    • вызывает методы реализующие зависимости
    • сохраняет признак успешности обработки зависимости
    • сохраняет данные, которые сформировала зависимость.
  4. Тесты связанные с неразрешенными зависимостями переводятся в статус "Пропущен" и не вызываются при прогоне.
  5. После этого происходит запуск тестов.
  6. Любой тест может обратиться к результатам обработки зависимостей используя ЮТест.Зависимость

Доступные виды зависимостей

Зависимость ФайлыПроекта

Зависимость тестов от файлов проекта. Если в каталоге проекта нет этих файлов, то тест не будет выполнен.

подсказка

Каталог проекта задается в параметрах запуска - projectPath.

Эта зависимость переносит файлы на сервер, чтобы они были доступны в серверных тестах и сохраняет в контексте путь к перенесенному файлу/каталогу (для клиентского теста будет хранится путь к файлам на клиенте).

Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
.ДобавитьТест("РаботаСФайлами")
.ЗависитОт().ФайлыПроекта("ОтносительныеПуть"); // Указываем зависимость
КонецПроцедуры

Процедура РаботаСФайлами() Экспорт

КаталогСФайлами = ЮТест.Зависимость(ЮТЗависимости.ФайлыПроекта("ОтносительныеПуть")).ПолноеИмя;
...

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

Зависимость ФабрикаXDTO

Зависимость тестов от фабрики XDTO, созданной на основании файлов проекта.
Создает на сервере из файлов фабрику и сохраняет ее в контекст.

Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.
..ДобавитьСерверныйТест("ФабрикаJUnit").ЗависитОт().ФабрикаXDTO("fixtures/junit")
КонецПроцедуры

Процедура ФабрикаJUnit() Экспорт

Фабрика = ЮТест.Зависимость(ЮТЗависимости.ФабрикаXDTO("fixtures/junit")).Фабрика;

ТестовыйНабор = ЮТест.Данные().КонструкторОбъектаXDTO("testsuite", "http://junit.org/schema", Фабрика)
.ФикцияНезаполненных()
.ДанныеОбъекта();

ЮТест.ОжидаетЧто(ТестовыйНабор)
.ИмеетТип(Тип("ОбъектXDTO"))
.Существует()
.ИмеетСвойство("properties")
.ИмеетСвойство("testcase")
.ИмеетСвойство("failures");

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