Логирование вызовов:
Полный пример с использованием всех трёх методов
Представим сервис для обработки заказов:
Тест:
#Java #Training #Spring #Testing #Mockito #thenReturn #thenThrow #thenAnswer
Mockito.when(mockList.get(anyInt())).thenAnswer(invocation -> {
int index = invocation.getArgument(0);
System.out.println("Method called with index: " + index);
return "Logged Value";
});
System.out.println(mockList.get(10)); // Лог: Method called with index: 10
// Вывод: Logged Value
Полный пример с использованием всех трёх методов
Представим сервис для обработки заказов:
@Service
public class OrderService {
public String createOrder(String productId) {
return "Order created for product: " + productId;
}
public void cancelOrder(String orderId) {
throw new UnsupportedOperationException("Cancel not supported");
}
public String getOrderStatus(String orderId) {
return "Status for order " + orderId;
}
}
Тест:
@ExtendWith(MockitoExtension.class)
public class OrderServiceTest {
@Mock
private OrderService orderService;
@Test
void testThenReturn() {
// Настраиваем thenReturn
Mockito.when(orderService.createOrder("123")).thenReturn("Mocked Order Created");
String result = orderService.createOrder("123");
Assertions.assertEquals("Mocked Order Created", result);
}
@Test
void testThenThrow() {
// Настраиваем thenThrow
Mockito.when(orderService.cancelOrder("invalid")).thenThrow(new IllegalArgumentException("Invalid Order"));
Assertions.assertThrows(IllegalArgumentException.class, () -> {
orderService.cancelOrder("invalid");
});
}
@Test
void testThenAnswer() {
// Настраиваем thenAnswer
Mockito.when(orderService.getOrderStatus(anyString())).thenAnswer(invocation -> {
String orderId = invocation.getArgument(0);
return "Dynamic status for " + orderId;
});
String status = orderService.getOrderStatus("456");
Assertions.assertEquals("Dynamic status for 456", status);
}
}
#Java #Training #Spring #Testing #Mockito #thenReturn #thenThrow #thenAnswer
Всем привет!🖐
Увлекся и забыл написать, что завтра как обычно мы встречаемся в 16:00 по МСК и будем повторять Spring AOP💪
Если сам вспомню 😛
Жду всех как всегда!🍸
Увлекся и забыл написать, что завтра как обычно мы встречаемся в 16:00 по МСК и будем повторять Spring AOP💪
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет! 💪
С самого утра готовлю для Вас всю возможную информацию по Spring AOP, есть что рассказать😎
К сожалению Security оказался не простым для подготовки с наскока😐 , поэтому его я перенесу на следующие встречи 😐
В 16:00 всех жду на встречу!👀
С самого утра готовлю для Вас всю возможную информацию по Spring AOP, есть что рассказать
К сожалению Security оказался не простым для подготовки с наскока
В 16:00 всех жду на встречу!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Наглядно разбираем Spring AOP, пишем свою аннотацию. Встреча от 05.01.2025
Запись нашей встречи -
YOUTUBE
RUTUBE
На сегодняшней встрече в прикладном ключе мы разобрали:
— Что такое Spring AOP и для чего он нужен.
— Что такое Advice и Poincut
— Как написать логирование без внесения изменений в отслеживаемый код
— Написание аннотации и запуск логики для аннотируемого ею метода
Код на GitHub - https://github.com/Oleborn/WebTasksManager.git
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Всем хорошего настроения!🤘 🔫
Запись нашей встречи -
YOUTUBE
RUTUBE
На сегодняшней встрече в прикладном ключе мы разобрали:
— Что такое Spring AOP и для чего он нужен.
— Что такое Advice и Poincut
— Как написать логирование без внесения изменений в отслеживаемый код
— Написание аннотации и запуск логики для аннотируемого ею метода
Код на GitHub - https://github.com/Oleborn/WebTasksManager.git
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Всем хорошего настроения!
Please open Telegram to view this post
VIEW IN TELEGRAM
Тестирование 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
Что выведет код?
#Tasks
public class Task060125_1 {
public static void main(String[] args) {
int a = 10;
double b = 3.0;
double c = a / b;
System.out.println(c);
}
}
#Tasks
Вопросы с собеседования 👩💻
Вопрос: Что такое JVM?
Вопрос: Что такое JVM?
Anonymous Quiz
9%
Это инструмент для компиляции Java-кода.
89%
Это виртуальная машина, которая выполняет байт-код Java.
2%
Это библиотека для работы с сетью в Java.
0%
Это среда разработки для Java.
Please open Telegram to view this post
VIEW IN TELEGRAM
Интеграционные тесты с использованием базы данных
1. Что такое интеграционные тесты?
Интеграционные тесты проверяют работу нескольких компонентов вместе, включая взаимодействие с внешними системами, такими как базы данных, REST API и т. д. Spring предлагает инструменты для упрощения тестирования с использованием реальной базы данных.
2. Интеграционные тесты с PostgreSQL
Чтобы протестировать взаимодействие с базой данных, можно использовать тестовую базу данных (например, H2) или реальную базу данных, такую как PostgreSQL.
Добавьте зависимости: В pom.xml:
Настройте application-test.properties:
Пример теста:
3. Использование @Sql для предустановки данных
Вы можете использовать SQL-скрипты для подготовки данных перед тестами.
Пример test-data.sql:
#Java #Training #Spring #Testing #Mockito #IntegrationTests
1. Что такое интеграционные тесты?
Интеграционные тесты проверяют работу нескольких компонентов вместе, включая взаимодействие с внешними системами, такими как базы данных, REST API и т. д. Spring предлагает инструменты для упрощения тестирования с использованием реальной базы данных.
2. Интеграционные тесты с PostgreSQL
Чтобы протестировать взаимодействие с базой данных, можно использовать тестовую базу данных (например, H2) или реальную базу данных, такую как PostgreSQL.
Добавьте зависимости: В pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>test</scope>
</dependency>
Настройте application-test.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/testdb
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.hibernate.ddl-auto=update
Пример теста:
@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
@Transactional
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testSaveAndFindUser() {
// Создаём пользователя
User user = new User();
user.setName("John");
user.setEmail("john@example.com");
// Сохраняем пользователя
userRepository.save(user);
// Проверяем, что он сохраняется и извлекается
Optional<User> foundUser = userRepository.findById(user.getId());
Assertions.assertTrue(foundUser.isPresent());
Assertions.assertEquals("John", foundUser.get().getName());
}
}
3. Использование @Sql для предустановки данных
Вы можете использовать SQL-скрипты для подготовки данных перед тестами.
@Sql(scripts = "/test-data.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@SpringBootTest
public class SqlTest {
@Autowired
private UserRepository userRepository;
@Test
public void testWithSqlData() {
Optional<User> user = userRepository.findByName("PreloadedUser");
Assertions.assertTrue(user.isPresent());
}
}
Пример test-data.sql:
INSERT INTO users (id, name, email) VALUES (1, 'PreloadedUser', 'user@example.com');
#Java #Training #Spring #Testing #Mockito #IntegrationTests
Тестирование веб-приложений в Spring
Веб-приложения являются центральным элементом многих проектов, а тестирование REST-контроллеров помогает убедиться, что API работает корректно. Для этих целей Spring предлагает инструменты, такие как MockMvc и аннотация @WebMvcTest.
Основы тестирования контроллеров с MockMvc и @WebMvcTest
1. Использование MockMvc
MockMvc — это инструмент для тестирования REST-контроллеров без необходимости запуска всего приложения.
Он позволяет:
Отправлять HTTP-запросы к контроллерам.
Проверять их ответы (статус, заголовки, тело и т. д.).
Работать с сериализацией/десериализацией JSON.
Создайте тестовый класс с аннотацией @WebMvcTest:
2. Аннотация @WebMvcTest
Аннотация @WebMvcTest конфигурирует Spring так, чтобы загружались только веб-компоненты, связанные с тестируемыми контроллерами. Это делает тесты быстрыми и изолированными.
Особенности:
Загружает только контекст веб-слоя:
Регистрируются только контроллеры, обработчики ошибок и связанные с ними компоненты.
Другие части приложения, такие как сервисы или репозитории, не загружаются.
Использование @MockitoBean:
Для замены зависимостей контроллеров мок-объектами.
Импорт дополнительных компонентов: Если нужно задействовать специфическую конфигурацию, можно использовать @Import.
Пример:
3. Методы MockMvc: perform, andExpect, andReturn
Метод perform
Отправляет HTTP-запрос к указанному маршруту контроллера. Он принимает объект MockHttpServletRequestBuilder, который позволяет настроить запрос.
Пример GET-запроса:
Пример POST-запроса:
Метод andExpect
Проверяет различные аспекты ответа:
HTTP-статус.
Заголовки.
Тело ответа.
Пример:
Метод andReturn
Возвращает полный объект ответа, который можно анализировать для более сложных проверок.
Пример:
4. Работа с сериализацией и тестирование JSON-данных
Для тестирования контроллеров, возвращающих JSON, полезно использовать библиотеку Jackson (по умолчанию в Spring Boot).
Пример сериализации объекта в JSON:
Пример десериализации JSON в объект:
#Java #Training #Spring #Testing #Mockito #TestingWeb
Веб-приложения являются центральным элементом многих проектов, а тестирование REST-контроллеров помогает убедиться, что API работает корректно. Для этих целей Spring предлагает инструменты, такие как MockMvc и аннотация @WebMvcTest.
Основы тестирования контроллеров с MockMvc и @WebMvcTest
1. Использование MockMvc
MockMvc — это инструмент для тестирования REST-контроллеров без необходимости запуска всего приложения.
Он позволяет:
Отправлять HTTP-запросы к контроллерам.
Проверять их ответы (статус, заголовки, тело и т. д.).
Работать с сериализацией/десериализацией JSON.
Создайте тестовый класс с аннотацией @WebMvcTest:
@WebMvcTest(controllers = MyController.class)
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private MyService myService;
// Тесты будут здесь
}
2. Аннотация @WebMvcTest
Аннотация @WebMvcTest конфигурирует Spring так, чтобы загружались только веб-компоненты, связанные с тестируемыми контроллерами. Это делает тесты быстрыми и изолированными.
Особенности:
Загружает только контекст веб-слоя:
Регистрируются только контроллеры, обработчики ошибок и связанные с ними компоненты.
Другие части приложения, такие как сервисы или репозитории, не загружаются.
Использование @MockitoBean:
Для замены зависимостей контроллеров мок-объектами.
Импорт дополнительных компонентов: Если нужно задействовать специфическую конфигурацию, можно использовать @Import.
Пример:
@WebMvcTest(controllers = MyController.class)
@Import(MyCustomConfig.class)
public class MyControllerTest {
// Тесты
}
3. Методы MockMvc: perform, andExpect, andReturn
Метод perform
Отправляет HTTP-запрос к указанному маршруту контроллера. Он принимает объект MockHttpServletRequestBuilder, который позволяет настроить запрос.
Пример GET-запроса:
mockMvc.perform(get("/api/items"))
.andExpect(status().isOk());
Пример POST-запроса:
mockMvc.perform(post("/api/items")
.content("{\"name\":\"Test Item\"}")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated());
Метод andExpect
Проверяет различные аспекты ответа:
HTTP-статус.
Заголовки.
Тело ответа.
Пример:
mockMvc.perform(get("/api/items"))
.andExpect(status().isOk()) // Проверка HTTP-статуса
.andExpect(content().contentType(MediaType.APPLICATION_JSON)) // Проверка заголовка Content-Type
.andExpect(jsonPath("$.size()").value(3)); // Проверка JSON-данных
Метод andReturn
Возвращает полный объект ответа, который можно анализировать для более сложных проверок.
Пример:
MvcResult result = mockMvc.perform(get("/api/items"))
.andExpect(status().isOk())
.andReturn();
String responseBody = result.getResponse().getContentAsString();
Assertions.assertTrue(responseBody.contains("ItemName"));
4. Работа с сериализацией и тестирование JSON-данных
Для тестирования контроллеров, возвращающих JSON, полезно использовать библиотеку Jackson (по умолчанию в Spring Boot).
Пример сериализации объекта в JSON:
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(new Item(1L, "Test Item"));
Пример десериализации JSON в объект:
String jsonResponse = "{\"id\":1,\"name\":\"Test Item\"}";
Item item = objectMapper.readValue(jsonResponse, Item.class);
Assertions.assertEquals("Test Item", item.getName());
#Java #Training #Spring #Testing #Mockito #TestingWeb
Что выведет код?
#Tasks
public class Task070125_1 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "world";
String result = str1.concat(" ").concat(str2).toUpperCase();
System.out.println(result);
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
34%
HELLOWORLD
6%
hello world
59%
HELLO WORLD
0%
helloWorld
0%
JAVA FOREVER
Вопросы с собеседования 👩💻
Вопрос: Что такое final в Java?
Вопрос: Что такое final в Java?
Anonymous Quiz
22%
Ключевое слово для создания констант.
13%
Ключевое слово для обозначения метода, который нельзя переопределить.
0%
Ключевое слово для обозначения класса, который нельзя наследовать.
66%
Все вышеперечисленное.
Please open Telegram to view this post
VIEW IN TELEGRAM
Написание тестов для CRUD REST API
Пример контроллера
Тестирование CRUD операций
Особенности
@MockitoBean для сервиса:
Изолирует тест от реального сервиса.
Позволяет задавать поведение с помощью Mockito.
Тестирование сериализации/десериализации:
Используйте ObjectMapper для работы с JSON.
Работа с jsonPath:
Удобный способ проверки JSON-структур.
#Java #Training #Spring #Testing #Mockito #TestingWeb
Пример контроллера
@RestController
@RequestMapping("/api/items")
public class ItemController {
private final ItemService itemService;
@Autowired
public ItemController(ItemService itemService) {
this.itemService = itemService;
}
@GetMapping
public List<Item> getAllItems() {
return itemService.getAllItems();
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Item createItem(@RequestBody Item item) {
return itemService.saveItem(item);
}
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteItem(@PathVariable Long id) {
itemService.deleteItem(id);
}
}
Тестирование CRUD операций
@WebMvcTest(controllers = ItemController.class)
public class ItemControllerTest {
@Autowired
private MockMvc mockMvc;
@MockitoBean
private ItemService itemService;
@Test
public void testGetAllItems() throws Exception {
List<Item> items = Arrays.asList(new Item(1L, "Item1"), new Item(2L, "Item2"));
Mockito.when(itemService.getAllItems()).thenReturn(items);
mockMvc.perform(get("/api/items"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.size()").value(2))
.andExpect(jsonPath("$[0].name").value("Item1"));
}
@Test
public void testCreateItem() throws Exception {
Item item = new Item(1L, "NewItem");
Mockito.when(itemService.saveItem(Mockito.any(Item.class))).thenReturn(item);
mockMvc.perform(post("/api/items")
.content("{\"name\":\"NewItem\"}")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.name").value("NewItem"));
}
@Test
public void testDeleteItem() throws Exception {
mockMvc.perform(delete("/api/items/1"))
.andExpect(status().isNoContent());
}
}
Особенности
@MockitoBean для сервиса:
Изолирует тест от реального сервиса.
Позволяет задавать поведение с помощью Mockito.
Тестирование сериализации/десериализации:
Используйте ObjectMapper для работы с JSON.
Работа с jsonPath:
Удобный способ проверки JSON-структур.
#Java #Training #Spring #Testing #Mockito #TestingWeb
Основы тестирования взаимодействия с базами данных в Spring
Тестирование взаимодействия с базами данных — важная часть разработки приложений на Spring.
Основные аннотации
@DataJpaTest:
Эта аннотация используется для тестирования JPA-репозиториев. Она настраивает in-memory базу данных (например, H2) по умолчанию, но можно настроить и для работы с PostgreSQL.
Автоматически настраивает EntityManager, DataSource и другие компоненты, необходимые для работы с JPA.
@SpringBootTest:
Используется для интеграционного тестирования, когда нужно поднять весь контекст Spring. Подходит для тестирования взаимодействия с реальной базой данных.
Можно указать webEnvironment = SpringBootTest.WebEnvironment.NONE, чтобы не поднимать веб-сервер.
@TestConfiguration:
Позволяет определить дополнительные бины или конфигурации, которые будут использоваться только в тестах.
@Sql:
Позволяет выполнять SQL-скрипты перед или после тестов. Например, для заполнения базы данных тестовыми данными.
@Transactional:
Указывает, что тест должен выполняться в транзакции, которая будет откачена после завершения теста. Это помогает избежать изменений в базе данных между тестами.
@AutoConfigureTestDatabase:
Позволяет заменить in-memory базу данных на реальную (например, PostgreSQL) для тестирования.
Настройка тестовой базы данных
Для тестирования с PostgreSQL нужно:
Добавить зависимость на PostgreSQL в pom.xml или build.gradle:
Настроить application-test.properties или application-test.yml для подключения к PostgreSQL:
Пример теста
#Java #Training #Spring #Testing #TestingDB
Тестирование взаимодействия с базами данных — важная часть разработки приложений на Spring.
Основные аннотации
@DataJpaTest:
Эта аннотация используется для тестирования JPA-репозиториев. Она настраивает in-memory базу данных (например, H2) по умолчанию, но можно настроить и для работы с PostgreSQL.
Автоматически настраивает EntityManager, DataSource и другие компоненты, необходимые для работы с JPA.
@SpringBootTest:
Используется для интеграционного тестирования, когда нужно поднять весь контекст Spring. Подходит для тестирования взаимодействия с реальной базой данных.
Можно указать webEnvironment = SpringBootTest.WebEnvironment.NONE, чтобы не поднимать веб-сервер.
@TestConfiguration:
Позволяет определить дополнительные бины или конфигурации, которые будут использоваться только в тестах.
@Sql:
Позволяет выполнять SQL-скрипты перед или после тестов. Например, для заполнения базы данных тестовыми данными.
@Transactional:
Указывает, что тест должен выполняться в транзакции, которая будет откачена после завершения теста. Это помогает избежать изменений в базе данных между тестами.
@AutoConfigureTestDatabase:
Позволяет заменить in-memory базу данных на реальную (например, PostgreSQL) для тестирования.
Настройка тестовой базы данных
Для тестирования с PostgreSQL нужно:
Добавить зависимость на PostgreSQL в pom.xml или build.gradle:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
Настроить application-test.properties или application-test.yml для подключения к PostgreSQL:
spring.datasource.url=jdbc:postgresql://localhost:5432/testdb
spring.datasource.username=user
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=create-drop
Пример теста
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Sql(scripts = "/init-test-data.sql")
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testFindByUsername() {
User user = userRepository.findByUsername("testuser");
assertNotNull(user);
assertEquals("testuser", user.getUsername());
}
}
#Java #Training #Spring #Testing #TestingDB
Что выведет код?
#Tasks
public class Task080125_1 {
private static int x = 5;
static {
x = 10;
}
{
x = 15;
}
public Task080125_1() {
System.out.println(x);
}
public static void main(String[] args) {
new Task080125_1();
}
}
#Tasks
Вопросы с собеседования 👩💻
Вопрос: Что такое перегрузка методов (overloading)?
Вопрос: Что такое перегрузка методов (overloading)?
Anonymous Quiz
27%
Это изменение реализации метода в подклассе.
61%
Это создание нескольких методов с одинаковым именем, но разными параметрами.
3%
Это удаление метода из класса.
9%
Это переопределение метода в суперклассе.