Интеграционное тестирование в Spring: аннотации Spring Testing, @DirtiesContext
@DirtiesContext указывает, что базовый Spring ApplicationContext был загрязнен во время выполнения теста (то есть тест каким-то образом изменил или повредил его - например, изменив состояние одноэлементного bean-компонента) и должен быть закрыт. Когда контекст приложения помечен как грязный, он удаляется из кеша среды тестирования и закрывается. Как следствие, базовый контейнер Spring перестраивается для любого последующего теста, для которого требуется контекст с такими же метаданными конфигурации.
Вы можете использовать @DirtiesContext как аннотацию на уровне класса, так и как аннотацию на уровне метода в пределах одного класса или иерархии классов. В таких сценариях ApplicationContext помечается как грязный до или после любого такого аннотированного метода, а также до или после текущего тестового класса, в зависимости от настроенного метода methodMode и classMode.
Следующие примеры объясняют, когда контекст может быть загрязнен для различных сценариев конфигурации:
Перед текущим тестовым классом, когда он объявлен в классе с режимом класса, установленным на BEFORE_CLASS.
@DirtiesContext(classMode = BEFORE_CLASS) // Загрязнение контекста перед текущим тестовым классом.
class FreshContextTests {
// некоторые тесты, требующие нового контейнера Spring
}
После текущего тестового класса, когда он объявлен в классе с режимом класса, установленным на AFTER_CLASS (т.е. режим класса по умолчанию).
@DirtiesContext // Загрязнение контекста после текущего тестового класса.
class ContextDirtyingTests {
// некоторые тесты,
// которые приводят к загрязнению контейнера Spring
}
Перед каждым тестовым методом в текущем тестовом классе, если он объявлен в классе с режимом класса, установленным на BEFORE_EACH_TEST_METHOD.
@DirtiesContext(classMode = BEFORE_EACH_TEST_METHOD)
class FreshContextTests {
// некоторые тесты, требующие нового контейнера Spring
}
После каждого тестового метода в текущем тестовом классе, если он объявлен в классе с режимом класса, установленным на AFTER_EACH_TEST_METHOD.
@DirtiesContext(classMode = AFTER_EACH_TEST_METHOD)
class ContextDirtyingTests {
// некоторые тесты,
// которые приводят к загрязнению контейнера Spring
}
Перед текущим тестом, когда он объявлен в методе с режимом метода, установленным на BEFORE_METHOD.
@DirtiesContext(methodMode = BEFORE_METHOD)
@Test
void testProcessWhichRequiresFreshAppCtx() {
// некоторая логика, требующая нового контейнера Spring
}
После текущего теста, когда он объявлен в методе с режимом метода, установленным на AFTER_METHOD (т.е. режим метода по умолчанию).
@DirtiesContext
@Test
void testProcessWhichDirtiesAppCtx() {
// некоторая логика,
// которая приводит к загрязнению контейнера Spring
}
Если вы используете @DirtiesContext в тесте, контекст которого настроен как часть иерархии контекста с помощью @ContextHierarchy, вы можете использовать флаг hierarchyMode для управления очисткой кеша контекста. По умолчанию для очистки кеша контекста используется исчерпывающий алгоритм, включая не только текущий уровень, но и все другие иерархии контекста, которые имеют общий контекст предка, общий для текущего теста. Все экземпляры ApplicationContext, которые находятся в подиерархии общего контекста предка, удаляются из кеша контекста и закрываются. Если исчерпывающий алгоритм является излишним для конкретного варианта использования, вы можете указать более простой алгоритм текущего уровня, как показано в следующем примере.
JavaKotlin
@ContextHierarchy({
@ContextConfiguration("/parent-config.xml"),
@ContextConfiguration("/child-config.xml")
})
class BaseTests {
// тело класса...
}
class ExtendedTests extends BaseTests {
@Test
@DirtiesContext(hierarchyMode = CURRENT_LEVEL) // Использовать алгоритм текущего уровня.
void test() {
// некоторая логика,
// которая приводит к загрязнению дочернего контекста
}
}
Читайте также:
- Интеграционное тестирование в Spring: аннотации Spring Testing
- Интеграционное тестирование в Spring: аннотации Spring Testing, @WebAppConfiguration, @ContextHierarchy
- Интеграционное тестирование в Spring: аннотации Spring Testing, @ActiveProfiles, @TestPropertySource, @DynamicPropertySource
Комментарии
Отправить комментарий