junior
Как настроить профили для тестов?
Spring Boot позволяет использовать отдельные файлы конфигурации для тестового окружения через механизм профилей.
Создание тестовой конфигурации
Файл src/test/resources/application-test.yml:
Пример конфигурации
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
properties:
hibernate:
format_sql: true
mail:
host: localhost
port: 3025
app:
external-api:
url: http://localhost:8089/mock-api
feature:
notifications-enabled: false
Активация профиля в тестах
Пример
@SpringBootTest
@ActiveProfiles("test")
class UserServiceTest {
@Value("${app.external-api.url}")
private String apiUrl;
@Test
void shouldUseTestConfiguration() {
assertEquals("http://localhost:8089/mock-api", apiUrl);
}
}
Несколько профилей
Пример
@SpringBootTest
@ActiveProfiles({"test", "local"})
class MultiProfileTest {
// Загружает application-test.yml и application-local.yml
}
Переопределение отдельных свойств
Пример
// Через @SpringBootTest
@SpringBootTest(properties = {
"app.feature.notifications-enabled=false",
"spring.jpa.show-sql=true"
})
class PropertyOverrideTest { /* ... */ }
// Через @TestPropertySource
@SpringBootTest
@TestPropertySource(locations = "classpath:custom-test.properties")
class CustomPropertyTest { /* ... */ }
@SpringBootTest
@TestPropertySource(properties = {
"app.timeout=5000",
"app.retry-count=3"
})
class InlinePropertyTest { /* ... */ }
Spring Boot сначала ищет файлы конфигурации в src/test/resources. Если там есть application.properties или application.yml, он используется вместо файла из src/main/resources.
На собеседовании: важно знать приоритет:
@TestPropertySource>@SpringBootTest(properties)>application-test.yml>application.yml. Частая ошибка — положитьapplication.propertiesвsrc/test/resourcesи удивляться, что production-конфигурация полностью перекрыта.