Тестирование ПО глазами разработчика

preview_player
Показать описание
В данном видеокурсе мы изучим теоретические основы и получим практические навыки юнит и интеграционного тестирования на примере работы со Spring Boot приложениями с использованием JUnit, Mockito и TestContainers.

Дружное сообщество:

Материалы для разработчиков:

Технологии проектов:
* Java 21
* Spring Boot 3
* Spring Web
* Spring WebFlux
* Spring Data
* Lombok
* JUnit
* Mockito
* PostgreSQL
* Embedded DB H2
* Testcontainers

Ссылка на GitHub репозиторий проекта qafordevs (блокирующий подход):

Описание веток

Ветка: STEP 1
Описание:
Создание корректной структуры проекта (entity, repository).
Базовая конфигурация

Ветка: STEP 2
Описание:
Добавлены тесты для репозиторного слоя с использованием:
* Аннотации @DataJpaTest
* Базы данных H2

Ветка: STEP 3
Описание:
Добавлен слой service с бизнес-логикой приложения

Ветка: STEP 4
Описание:
Добавлены модульные (юнит) тесты для сервисного слоя с использованием Mockito

Ветка: STEP 5
Описание:
Добавлены модульные тесты для слоя контроллеров с использованием:
* Mockito
* Аннотации @WebMvcTest
* Объекта MockMvc

Ветка: STEP 6
Описание:
Добавлены интеграционные тесты для слоя контроллеров с использованием:
* локальной БД PostgreSQL
* Аннотации @SpringBootTest

Ветка: STEP 7
Описание:
Добавлена и применена конфигурация для Testcontainers

Ссылка на GitHub репозиторий проекта qafordevs_reactive (реактивный подход):

Описание веток

Ветка: STEP 1
Описание: Создан базовый REST API с логикой работы с сущностью DeveloperEntity

Ветка: STEP 2
Описание: Добавлена логика обработки ошибок с использованием:
* DefaultErrorAttributes
* AbstractErrorWebExceptionHandler

Ветка: STEP 3
Описание: Добавлены юнит тесты для слоя контроллеров с использованием:
* Mockito
* Аннотации @WebFluxTest

Ветка: STEP 4
Описание: Добавлены интеграционные тесты для слоя контроллеров с использованием:
* Testcontainers
* Аннотации @SpringBootTest

Ссылка на файл с презентацией:

00:00:00 Введение
00:03:33 Теоретические основы
00:11:00 Настройка учебного проекта
00:17:54 Создание базовой структуры проекта
00:24:30 Написание юнит тестов для репозиторного слоя
00:51:20 Написание юнит тестов для сервисного слоя
01:31:05 Написание юнит тестов для слоя контроллеров
02:07:34 Написание интеграционных тестов для слоя контроллеров с использованием локальной БД PostgreSQL
02:32:57 Написание интеграционных тестов для слоя контроллеров с использованием TestContainers
02:41:39 Теоретические основы для тестирования реактивного приложения (Spring WebFlux)
02:43:04 Настройка учебного проекта с использованием реактивного подхода
03:08:20 Добавления обработчика ошибок в учебный проект
03:10:56 Написание юнит тестов для слоя реактивных контроллеров
03:32:15 Написание интеграционных тестов для слоя реактивных контроллеров с использованием TestContainers
03:47:07 Заключение
Рекомендации по теме
Комментарии
Автор

Евгений талант, который не жалеет своего времени делиться знаниями и опытом, спасибо большое! Жаль что по C# на просторах ютуба нет такого же Евгения(

GreyAbs
Автор

Низкий поклон к твоему труду, спасибо большое, за то, что ты делаешь!

davitkostandyan
Автор

Евгений, дай Бог Вам здоровья, сил и вдохновения на продолжение различных направлений Вашей деятельности на канале (обучающие видео, менторинг, мок-интервью). Качество и подача материала на высоте.
Ждем следующих видео на Вашем канале!
Удачи!

lknfgjk
Автор

Лучший канал по Java! Огромное спасибо, Евгений!!!

pelmensmetankovich
Автор

Обалдеть! Вот это курс! Евгений, ты реально меценат. Меценат с большой буквы!
Огромная благодарность за то делишься экспертизой. Таких людей должно быть больше!
Жень, от всей души желаю тебе всего самого доброго. Тебе и твоим близким благополучия!
Еще раз спасибо за потрясающий материал.

Devivl
Автор

Спасибо, Женя! по качеству этот материал намного превосходит все подобные платные курсы. я бы не пожалел даже купить такое.

kensaitakeso
Автор

В одном видео все, что я не мог найти в разных источниках. 👍И отличная подача.

RadioGubitel
Автор

Великолепная, монструозная, важнейшая работа! Спасибо, мастер)

ГлебВалерьевич-уы
Автор

Евгений, приветствую! При тестировании сервисного слоя ( 1:15:00 и далее ) мы присваиваем методам мока репозитория findByEmail и getById поведение, которым они не обладают и обладать, в моём понимании, не должны - пробрасывание исключений. Не было бы правильнее делать .willReturn(null) ? И уже этот null обрабатывать в методе сервиса и дожидаться проброса исключения там? Просто в моём понимании мы не тестируем функциональность по пробросу исключений в методе сервиса при получении null от репозитория. Надеюсь понятно написал) Для наглядности укажу код :

Метод из ролика :
--
public void {
//given



//when
assertThrows(DeveloperIsNotExistException.class, ()->

 
//then
}

Мой метод :
--
public void {
//given
BDDMockito.given( .willReturn(null);
 
//when
assertThrows(DeveloperIsNotExistException.class, ()->

 
//then
}

vladik_vinogradik
Автор

Спасибо вам большие гайд! Долг искал норм гайд где бы понять методологию!

ArthurMorgan_
Автор

Очень полезное видео и сколько труда вложено, благодарю!

alevadnaya
Автор

Как всегда. Подача материала супер. Спасибо за труд

АлександрБондарев-ъф
Автор

Спасибо Тебе добрый человек делишься своими трудами!

gogogo
Автор

Спасибо, Женя!) Давно уже нужно было это сделать))) Очень полезно)

borlok
Автор

Спасибо Евгений, как всегда отличный материал🔥🔥🔥

elnar_
Автор

Очень круто - все по тестированию в одном видео! Евгений, спасибо за контент!

igorklimov
Автор

любимый Java разработчик) блогодарья вашему каналу я стану senior)

ДневникТаджика-нг
Автор

спасибо Евгений за ваш труд
очень полезно

zhenyalee
Автор

Отличный курс, спасибо!
Вопрос: почему кастомные метода репозитория возвращают сущность, а не Optional?

tiy
Автор

3:40:52 не понял, зачем в entity сетится email?
Ведь мы проверяем изменение email, поэтому в сущности должен быть старый email, а в dto - новый.
Или я чего-то не понимаю?

tiy