Интеграционное тестирование в Spring: аннотации Spring Testing, @ActiveProfiles, @TestPropertySource, @DynamicPropertySource

@ActiveProfiles

@ActiveProfiles - это аннотация уровня класса, которая используется для объявления профилей определения bean-компонентов, которые должны быть активными при загрузке ApplicationContext для интеграционного теста.

В следующем примере показано, что dev профиль должен быть активен:

@ContextConfiguration
@ActiveProfiles("dev") 
class DeveloperTests {
    // тело класса...
}

В следующем примере показано, что должны быть активны и dev профиль, и integration профиль:

@ContextConfiguration
@ActiveProfiles({"dev", "integration"}) 
class DeveloperIntegrationTests {
    // тело класса...
}

@ActiveProfiles обеспечивает поддержку наследования профилей определения активных компонентов, объявленных суперклассами по умолчанию. Вы также можете разрешить активные профили определения bean-компонентов программно, реализовав настраиваемый ActiveProfilesResolver и зарегистрировав его с помощью атрибута resolver у @ActiveProfiles.

@TestPropertySource

@TestPropertySource - это аннотация на уровне класса, которую вы можете использовать для настройки расположения файлов свойств и встроенных свойств, которые будут добавлены в набор PropertySources в среде для ApplicationContext, загруженного для интеграционного теста.

В следующем примере показано, как объявить файл свойств из пути к классам:

@ContextConfiguration
@TestPropertySource("/test.properties") 
class MyIntegrationTests {
    // тело класса...
}

В следующем примере показано, как объявить встроенные (inlined) свойства:

@ContextConfiguration
@TestPropertySource(properties = { "timezone = GMT", "port: 4242" }) 
class MyIntegrationTests {
    // тело класса...
}

@DynamicPropertySource

@DynamicPropertySource - это аннотация на уровне метода, которую вы можете использовать для регистрации динамических свойств, которые будут добавлены к набору PropertySources в Environment для ApplicationContext, загруженного для интеграционного теста. Динамические свойства полезны, когда вы заранее не знаете значения свойств - например, если свойства управляются внешним ресурсом, например для контейнера, управляемого проектом Testcontainers.

В следующем примере показано, как зарегистрировать динамическое свойство:

@ContextConfiguration
class MyIntegrationTests {

    static MyExternalServer server = // ...

    @DynamicPropertySource 
    static void dynamicProperties(DynamicPropertyRegistry registry) { 
        registry.add("server.port", server::getPort); 
    }

    // тесты ...
}


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


Комментарии

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

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

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

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