Логирование вызовов:
Полный пример с использованием всех трёх методов
Представим сервис для обработки заказов:
Тест:
#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
👍2
Всем привет!🖐
Увлекся и забыл написать, что завтра как обычно мы встречаемся в 16:00 по МСК и будем повторять Spring AOP💪
Если сам вспомню 😛
Жду всех как всегда!🍸
Увлекся и забыл написать, что завтра как обычно мы встречаемся в 16:00 по МСК и будем повторять Spring AOP💪
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Привет! 💪
С самого утра готовлю для Вас всю возможную информацию по Spring AOP, есть что рассказать😎
К сожалению Security оказался не простым для подготовки с наскока😐 , поэтому его я перенесу на следующие встречи 😐
В 16:00 всех жду на встречу!👀
С самого утра готовлю для Вас всю возможную информацию по Spring AOP, есть что рассказать
К сожалению Security оказался не простым для подготовки с наскока
В 16:00 всех жду на встречу!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Наглядно разбираем 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
👍2
Тестирование 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
👍2
Что выведет код?
#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
👍1
👍1
Вопросы с собеседования 👩💻
Вопрос: Что такое JVM?
Вопрос: Что такое JVM?
Anonymous Quiz
9%
Это инструмент для компиляции Java-кода.
89%
Это виртуальная машина, которая выполняет байт-код Java.
2%
Это библиотека для работы с сетью в Java.
0%
Это среда разработки для Java.
👍2
Интеграционные тесты с использованием базы данных
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
👍2
Тестирование веб-приложений в 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
👍2
Что выведет код?
#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
👍2
Варианты ответа:
Anonymous Quiz
34%
HELLOWORLD
6%
hello world
59%
HELLO WORLD
0%
helloWorld
0%
JAVA FOREVER
👍2
Вопросы с собеседования 👩💻
Вопрос: Что такое final в Java?
Вопрос: Что такое final в Java?
Anonymous Quiz
22%
Ключевое слово для создания констант.
13%
Ключевое слово для обозначения метода, который нельзя переопределить.
0%
Ключевое слово для обозначения класса, который нельзя наследовать.
66%
Все вышеперечисленное.
👍2
Написание тестов для 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
👍2
Основы тестирования взаимодействия с базами данных в 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
👍2
Что выведет код?
#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
👍2
👍2
Вопросы с собеседования 👩💻
Вопрос: Что такое перегрузка методов (overloading)?
Вопрос: Что такое перегрузка методов (overloading)?
Anonymous Quiz
27%
Это изменение реализации метода в подклассе.
61%
Это создание нескольких методов с одинаковым именем, но разными параметрами.
3%
Это удаление метода из класса.
9%
Это переопределение метода в суперклассе.
👍2