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