Интеграционное тестирование в Spring: TestContext Framework, конфигурация контекста с классами компонентов

Чтобы загрузить ApplicationContext для ваших тестов с помощью классов компонентов, вы можете аннотировать свой тестовый класс с помощью @ContextConfiguration и настроить атрибут классов с помощью массива, содержащего ссылки на классы компонентов. В следующем примере показано, как это сделать:

@ExtendWith(SpringExtension.class)
// ApplicationContext будет загружен из 
// AppConfig и TestConfig
@ContextConfiguration(classes = {AppConfig.class, TestConfig.class}) 
class MyTest {
    // тело класса...
}

Компонентные классы

Термин "класс компонента" может относиться к любому из следующего:

  • Класс, помеченный @Configuration.
  • Компонент (то есть класс с аннотациями @Component, @Service, @Repository или другими стереотипными аннотациями).
  • Класс, совместимый с JSR-330, снабженный аннотациями javax.inject.
  • Любой класс, содержащий @Bean-методы.
  • Любой другой класс, который предназначен для регистрации в качестве компонента Spring (т.е. Bean-компонента Spring в ApplicationContext), потенциально использующий преимущества автоматического связывания одного конструктора без использования аннотаций Spring.

Если вы опустите атрибут classes в аннотации @ContextConfiguration, TestContext framework попытается обнаружить наличие классов конфигурации по умолчанию. В частности, AnnotationConfigContextLoader и AnnotationConfigWebContextLoader обнаруживают все статические вложенные классы тестового класса, которые соответствуют требованиям для реализаций классов конфигурации. Обратите внимание, что имя класса конфигурации произвольно. Кроме того, при желании тестовый класс может содержать более одного статического вложенного класса конфигурации. В следующем примере класс OrderServiceTest объявляет статический вложенный класс конфигурации с именем Config, который автоматически используется для загрузки ApplicationContext для тестового класса:

@SpringJUnitConfig 
// ApplicationContext будет загружен из
// статического вложенного класса Config
class OrderServiceTest {

    @Configuration
    static class Config {

        // этот bean-компонент будет внедрен 
        // в класс OrderServiceTest
        @Bean
        OrderService orderService() {
            OrderService orderService = 
                        new OrderServiceImpl();
            // устанавливаем свойства и т.д.
            return orderService;
        }
    }

    @Autowired
    OrderService orderService;

    @Test
    void testOrderService() {
        // тестируем orderService
    }

}


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


Комментарии

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

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

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

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