Spring Boot: интеграционное тестирование с Spring Testing

preview_player
Показать описание
Spring Boot Web Application (MVC): добавляем интеграционные тесты с фреймворком Spring Testing.

Для проверки корректной работы приложения используют различные тесты, наиболее распространённые и лёгкие в написании - интеграционные тесты, позволяющие проверить корректную работу всех механизмов, входящих в приложение, вместе.

Для написания наших интеграционных тестов приложения мы будем использвать богатый инструментарий фреймворка Spring Boot.

В качестве ориентира возьмём официальный гайд спринга по тестированию вэб слоя:

К сожалению, официальный гайд не всеобъемлющ и нам потребуются дополнительные зависимости:

Для более подробного знакомства с возможностями Spring, позволяющими тестировать приложения, рекомендую ознакомиться с официальной документацией:

В ходе данного видео мы рассмотрим тестирование авторизации в приложении, получение html страницы нашего приложения (с проверкой корректности отдаваемого результата), отправка get, post и multipart запросов с проверкой корректности ответа сервера.

Плейлист с созданием Spring Boot Rest приложения Sarafan:
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

Поддержать проект:

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

Рекомендации по теме
Комментарии
Автор

На youtube не так много каналов, где все четко и по делу. Спасибо за труды.

simplechannel
Автор

В `MainController.addMessage` вместо
`return "main"`
сделал редирект
`return success ? "redirect:/main" : "main"`.

При тестировании возникла проблема "Premature end of file" (класс

Решение. Сначала проверяем на


(как в `LoginTest.correctLoginTest`),
а потом еще раз
и далее как в видео.

Автору огромное спасибо за материал!

alexandrstroghov
Автор

Наконец появилось свободное время. Вернулся к sweater =)
Кстати, хочу сказать большое спасибо автору, отличный контент.

DarthJaxxFather
Автор

Не возможно найти слова благодарности... Автор ты

adiletzhuzupbekov
Автор

У меня другой проект, я адаптировал тесты под него.
Обычно авторов приходится ускорять, а данный автор сам какой-то суперускоренный=)
Спасибо за ваши старания, очень содержательное и полезное видео для меня

andrei
Автор

Для MySQL в файле messages-list-before.sql вместо :
alter sequence hibernate_sequence restart with 10;
нужно писать :
alter table message AUTO_INCREMENT 10;

МихаилБесфамильный-оч
Автор

Спасибо очень круто! Будет интересно про Rest посмотреть!

alexandrmakarevich
Автор

Первый раз глянул и скопипастил - почти ничего не поняв, прочекав больше инфы снова пересмотрел и уже с понимаем всё подстроил под свой проект, ещё раз благодарствую, всё очень сжато и крайне информативно!)

Andrzej
Автор

Круто, спасибо за труд) Будет ещё очень интересно послушать про CI ) если такое планируется))

АлександрЮрченко-щл
Автор

Ничего лишнего, только код и объяснение нужных вещей. Спасибо!

mikaketo
Автор

Если у кого-то будет выдавать ошибку в тесте mainPageTest, когда мы смотрим что у нас в навбаре - xpath может брать значение с кучей пробелов и тест будет падать хотя значение самой строки вроде тоже. нужна функция normalize-space для xpath
Выглядеть будет как-то так:

KeonieD
Автор

просто в восторге от автора и его уроков

kostiantynvergelis
Автор

Твои видосики облегчают мою жизнь. Прям очень сильно. Спасибо большое!

ВадимНаумов-лх
Автор

Спасибо большое автору. Да, Lombok мне тоже пришлось "выпилить". Как говорится, explicit всегда лучше чем implicit. Гайд на сайте SpringBoot немного изменился, повторяла за автором. В остальном все замечательно, все работает :) Спасибо, Андрей!

createdrop
Автор

У кого не видит сделайте следущее: Intellij Idea - File - Project Structure - Modules - src - test - java - resources - mark resources as "Test Resources". Мне сегодня помогло. На 22:15 два теста заработали.

johnnystartup
Автор

Не совсем понял смысл теста badCredentials(). Как я понял мы проверяем, что будет forbidden, если ввести неверного пользователя. Но в этом случае он вернет не forbidden, а редирект на /login?error, а forbidden он вернул в видео потому что csrf не передали.

т.е. тест на не правильные данные должен быть типа

public void badCredentials() throws Exception {
MockHttpServletRequestBuilder with = post("/login")
.param("username", "admin123")
.with(csrf());
this.mockMvc.perform(with)
.andDo(print())

}
или я не так понял смысл теста?

johnrambo
Автор

Спасибо! Отличный и лаконичный материал!

D.P._
Автор

Ну наконец-то из коробки нормальные вещи увидел! а не абракадабры всякие!)

Сергей-шыф
Автор

хорошая подача материала, подписка, лайк

inc.
Автор

Если вы на 10 минуте и вас не проходит correctLoginTest то скорее всего у вас тесты смотрят не в ту базу, и нужно сделать в классе аннотацию

denorian