Интеграционное тестирование в Spring: аннотации Spring Testing, @WebAppConfiguration, @ContextHierarchy

@WebAppConfiguration

@WebAppConfiguration - это аннотация уровня класса, которую можно использовать для объявления, что ApplicationContext, загруженный для интеграционного теста, должен быть WebApplicationContext. Простое присутствие @WebAppConfiguration в тестовом классе гарантирует, что WebApplicationContext будет загружен для теста с использованием значения по умолчанию "file:src/main/webapp" для пути к корню веб-приложения (то есть базовый путь ресурса). Базовый путь ресурса используется негласно для создания MockServletContext, который служит в качестве ServletContext для WebApplicationContext теста.

В следующем примере показано, как использовать аннотацию @WebAppConfiguration:

@ContextConfiguration
@WebAppConfiguration 
class WebAppTests {
    // тело класса...
}

Чтобы переопределить значение по умолчанию, вы можете указать другой базовый путь ресурса, используя неявно атрибут значения. Поддерживаются как префиксы ресурса classpath:, так и file:. Если префикс ресурса не указан, предполагается, что путь является ресурсом файловой системы. В следующем примере показано, как указать ресурс пути к классам:

@ContextConfiguration
@WebAppConfiguration("classpath:test-web-resources") 
class WebAppTests {
    // тело класса...
}

Обратите внимание, что @WebAppConfiguration необходимо использовать вместе с @ContextConfiguration, либо в одном тестовом классе, либо в иерархии тестовых классов.

@ContextHierarchy

@ContextHierarchy - это аннотация уровня класса, которая используется для определения иерархии экземпляров ApplicationContext для интеграционных тестов. @ContextHierarchy следует объявлять со списком из одного или нескольких экземпляров @ContextConfiguration, каждый из которых определяет уровень в иерархии контекста. Следующие примеры демонстрируют использование @ContextHierarchy в одном тестовом классе (@ContextHierarchy также может использоваться в иерархии тестовых классов):

@ContextHierarchy({
    @ContextConfiguration("/parent-config.xml"),
    @ContextConfiguration("/child-config.xml")
})
class ContextHierarchyTests {
    // тело класса...
}

@WebAppConfiguration
@ContextHierarchy({
    @ContextConfiguration(classes = AppConfig.class),
    @ContextConfiguration(classes = WebConfig.class)
})
class WebIntegrationTests {
    // тело класса...
}

Если вам нужно объединить или переопределить конфигурацию для данного уровня иерархии контекста в иерархии тестовых классов, вы должны явно назвать этот уровень, указав то же значение для атрибута имени в @ContextConfiguration на каждом соответствующем уровне в иерархии классов.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки