Тестирование Spring компонентов
Тестирование в Spring предполагает работу как с изолированными компонентами, так и с целым приложением, используя тестовый контекст Spring. Это позволяет проверять, как классы взаимодействуют друг с другом и внешними ресурсами (например, базами данных).
Spring Test Context и аннотации для настройки тестов
1. Подготовка контекста с помощью аннотации @SpringBootTest
Аннотация @SpringBootTest используется для запуска полного контекста Spring, который включает все зарегистрированные компоненты, как если бы приложение запускалось в реальной среде.
Пример использования:
Основные возможности @SpringBootTest
Запуск полного контекста Spring.
Это включает все бины, аннотации конфигурации, и зависимости.
Подходит для интеграционных тестов или тестирования сложных взаимодействий между компонентами.
Выбор режима загрузки контекста.
@SpringBootTest позволяет управлять, как будет загружаться контекст.
Конфигурация контекста с @ContextConfiguration
Если вы хотите явно указать, какая конфигурация должна быть использована для теста, используйте @ContextConfiguration.
Пример:
2. Использование аннотаций для настройки тестов
Spring предлагает несколько аннотаций, которые помогают настроить тестовый контекст.
1. @MockBean (заменена на @MockitoBean) и @SpyBean
@MockitoBean: Создаёт mock-объекты для использования в контексте Spring.
@SpyBean: Позволяет частично мокировать реальные компоненты.
Пример:
2. @TestPropertySource
Эта аннотация позволяет переопределить свойства конфигурации приложения для тестов.
Пример:
3. Дополнительные аннотации
@DirtiesContext: Перезагружает контекст после выполнения теста. Используется, если тест изменяет состояние контекста.
@Transactional: Автоматически откатывает изменения, сделанные в рамках теста, в базу данных.
@Sql и @SqlGroup: Выполняет SQL-скрипты до или после тестов.
#Java #Training #Spring #Testing #Mockito #SpringBootTest #MockBean #ContextConfiguration
Тестирование в Spring предполагает работу как с изолированными компонентами, так и с целым приложением, используя тестовый контекст Spring. Это позволяет проверять, как классы взаимодействуют друг с другом и внешними ресурсами (например, базами данных).
Spring Test Context и аннотации для настройки тестов
1. Подготовка контекста с помощью аннотации @SpringBootTest
Аннотация @SpringBootTest используется для запуска полного контекста Spring, который включает все зарегистрированные компоненты, как если бы приложение запускалось в реальной среде.
Пример использования:
@SpringBootTest
public class ApplicationTests {
@Autowired
private MyService myService;
@Test
public void contextLoads() {
Assertions.assertNotNull(myService);
}
}
Основные возможности @SpringBootTest
Запуск полного контекста Spring.
Это включает все бины, аннотации конфигурации, и зависимости.
Подходит для интеграционных тестов или тестирования сложных взаимодействий между компонентами.
Выбор режима загрузки контекста.
@SpringBootTest позволяет управлять, как будет загружаться контекст.
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) // Загружается mock-среда
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) // Используется реальный сервер с портом
Конфигурация контекста с @ContextConfiguration
Если вы хотите явно указать, какая конфигурация должна быть использована для теста, используйте @ContextConfiguration.
Пример:
@ContextConfiguration(classes = MyConfig.class) // Задаём конкретный класс конфигурации
@SpringBootTest
public class ConfiguredTest {
@Autowired
private MyService myService;
@Test
public void testWithCustomConfig() {
Assertions.assertNotNull(myService);
}
}
2. Использование аннотаций для настройки тестов
Spring предлагает несколько аннотаций, которые помогают настроить тестовый контекст.
1. @MockBean (заменена на @MockitoBean) и @SpyBean
@MockitoBean: Создаёт mock-объекты для использования в контексте Spring.
@SpyBean: Позволяет частично мокировать реальные компоненты.
Пример:
@SpringBootTest
public class ServiceTest {
@MockitoBean
private MyRepository myRepository;
@SpyBean
private MyService myService;
@Test
public void testWithMockBean() {
Mockito.when(myRepository.findById(1L)).thenReturn(Optional.of(new MyEntity(1L, "Test")));
String result = myService.processEntity(1L);
Assertions.assertEquals("Processed: Test", result);
}
}
2. @TestPropertySource
Эта аннотация позволяет переопределить свойства конфигурации приложения для тестов.
Пример:
@TestPropertySource(properties = "spring.datasource.url=jdbc:h2:mem:testdb")
@SpringBootTest
public class PropertySourceTest {
@Autowired
private DataSource dataSource;
@Test
public void testProperties() throws SQLException {
Assertions.assertTrue(dataSource.getConnection().getMetaData().getURL().contains("testdb"));
}
}
3. Дополнительные аннотации
@DirtiesContext: Перезагружает контекст после выполнения теста. Используется, если тест изменяет состояние контекста.
@Transactional: Автоматически откатывает изменения, сделанные в рамках теста, в базу данных.
@Sql и @SqlGroup: Выполняет SQL-скрипты до или после тестов.
#Java #Training #Spring #Testing #Mockito #SpringBootTest #MockBean #ContextConfiguration