SC24EP05 Тестирование веб-приложений - Разработка проектов со Spring

Поділитися
Вставка
  • Опубліковано 2 січ 2025

КОМЕНТАРІ •

  • @МаксимВдовин-я8ф
    @МаксимВдовин-я8ф 9 місяців тому +6

    Еще не смотрел ролик, но сразу ставлю лайк и выражаю благодарность за проделанную работу!

  • @jigoku9592
    @jigoku9592 9 місяців тому +3

    Очень качественный материал, достаточно хорошее погружение в тему касательно каждого ролика с этого канала! Лучший

  • @ЕгорБоровков-э8я
    @ЕгорБоровков-э8я 6 місяців тому +2

    Огромное спасибо, что делитесь опытом! Благодаря таким людям наша страна еще держится!

  • @Hocorend
    @Hocorend 5 місяців тому +2

    Спасибо, осилил урок спустя месяц, постоянно приходилось отвлекаться на что-то, а потом вспоминать, что же там было то неделю назад🤣
    Урок познавательный

  • @denisthestudent
    @denisthestudent 7 місяців тому +5

    Спасибо за крутой урок!
    У меня не мог запуститься интеграционный тест на 36:50
    APPLICATION FAILED TO START
    Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    Добавил в Run Configuration теста переменную окружения SPRING_PROFILES_ACTIVE=standalone и всё заработало

    • @vollmond23
      @vollmond23 6 місяців тому

      Либо перед классом теста можно добавить аннотацию @ActiveProfiles(value = "standalone")

    • @Hocorend
      @Hocorend 5 місяців тому

      Спасибо, как обычно смотрю не туда, куда надо и туплю

  • @МихаилМихаил-ф7у
    @МихаилМихаил-ф7у 2 місяці тому +1

    Спасибо. Приятно смотреть ролики и обновлять свои знания.

  • @Константин-ы9к
    @Константин-ы9к 9 місяців тому +1

    Лайк. Отличный русскоязычный контент.

  • @АлександрТяпкин-п2ц
    @АлександрТяпкин-п2ц 9 місяців тому +2

    Ура. В тестах не очень много опыта. То, что надо

  • @vladyslavhasporian2934
    @vladyslavhasporian2934 5 днів тому +1

    thanks

  • @Devivl
    @Devivl 9 місяців тому +2

    Низкий поклон за отличный обучающий материал! Как всегда, очень интересно и наглядно.
    Саш, не думал выпускать короткие лёгкие ролики на отвлеченные темы? Например, на какой ОС работаешь, какие инструменты при разработке используешь, какими ресурсами пользуешься, какие-то лайфхаки по части разработки или ещё о чем-нибудь? Не призыв к действию, любопытно. Главное, чтобы основная тема канала развивалась в том же ключе и с тем же настроем в твоем лице с позитивом и без шумящих соседей)
    PS: очень быстро печатаешь на английской раскладке. Порой не успеваю) На русской - понятное дело, но на английской - моё почтение.

    • @shurik_codes
      @shurik_codes  9 місяців тому +1

      Будучи программистом приходится больше писать на английском, так что это уже дело привычки) Насчёт коротких роликов думаю

  • @ГайратМадумаров-ю2я
    @ГайратМадумаров-ю2я 9 місяців тому +1

    Спасибо большое это то что нам всем было нужно. Надеюсь не обойдёте стороной вопрос как прицепить капчу.

  • @ДмитрийБусыгин-с3ф
    @ДмитрийБусыгин-с3ф 9 місяців тому +1

    Саня, спасибо большое! Жирный лайкос!!! Никогда не мог мокать oauth авторизацию в тестах, теперь понял)

  • @КаналКотикаиМаркушки
    @КаналКотикаиМаркушки 9 місяців тому +1

    Спасибо. Суперкрутой видос. Несколько раз был в Кургане - классный город☺

  • @eugenz2334
    @eugenz2334 9 місяців тому +2

    Серия видео огонь 🔥🔥🔥🔥🔥🔥

  • @alekseizhitenev6020
    @alekseizhitenev6020 5 місяців тому +1

    большое спасибо! тоже в свое время прихватил проблем с @Test не из нужного пакета) очень долго не мог понять, что происходит

  • @-202..5
    @-202..5 8 місяців тому +1

    лучший! спасибо за видео

  • @denisskyter4526
    @denisskyter4526 9 місяців тому +2

    Александр , для тестов rest api сервиса , для контроллеров лучше использовать интеграционные тесты или модульный ?

  • @svyatoiambrozii
    @svyatoiambrozii 8 місяців тому +2

    Еще вопрос возник - при интеграционном тестировании rest где требовался jwt декодер если самому написать подобный тест в системе с jwt токенами авторизации, вместо oauth2 то так же будет работать или @WithMockUser лучше для такого?

    • @shurik_codes
      @shurik_codes  8 місяців тому +1

      Всё зависит от того, насколько подробно хочется протестировать безопасность приложения. Если хочется протестировать полностью цепочку фильтров, что в целом правильно, когда есть какие-то самописные компоненты, то нужно обходиться без @WithMockUser и аналогичных аннотаций. Последние просто создают контекст безопасности с указанными параметрами и фактическая аутентификация не происходит.

  • @user-007-1
    @user-007-1 9 місяців тому +1

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

    • @shurik_codes
      @shurik_codes  9 місяців тому +1

      Нет, кафки в рамках данного проекта не будет. Про кафку я буду рассказывать отдельно.

  • @БогданПрядко-щ7л
    @БогданПрядко-щ7л 6 місяців тому +1

    здравствуйте
    не очень понятно как подключить бд через докер и testcontainers
    у вас есть на канале видео,которое затрагивает данную тему ?

    • @Владчук-щ8з
      @Владчук-щ8з 5 місяців тому

      здравствуйте. разобрались? потому что я сейчас сижу у меня этот контейнер (testcontainers/ryuk) никак на виндовс не запускается, можете помочь, если разобрались

    • @shurik_codes
      @shurik_codes  3 місяці тому

      самый простой вариант - через интеграцию TC в JDBC, в этом случае достаточно в spring.datasource.url добавить префикс tc: jdbc:tc:postgresql:16:///database_name

  • @viewer_evgeniy
    @viewer_evgeniy 7 місяців тому

    А почему зависимости дублируются в модульных pom файлах? Разве не стоит в случае, когда одни и те же зависимости используются в разных модулях - вынести их в общий (родительский) pom?

  • @svyatoiambrozii
    @svyatoiambrozii 8 місяців тому +1

    Отличное видео! Спасибо вам! Пытаюсь сделать то же самое, но опять столкнулся с проблемой - созданный в тесте по видео, он не отдает собственно метод createProduct, а при копировании выдает Cannot access com.example.managerapp.controller.ProductsController и подчеркивает красным, а при запуске теста java: method createProduct in class com.example.managerapp.controller.ProductsController cannot be applied to given types; А если убрать this обращение к controller и в аргументе response, то тест работает

  • @kazbowski
    @kazbowski 9 місяців тому +1

    эх, вот бы на работу затащить testcontainers :( (у нас оракл)

  • @GM11
    @GM11 8 місяців тому

    Спасибо за видео! Узнал много нового!
    Хотел бы уточнить один вопрос.
    Юнит тесты нельзя писать в интеграционных тестах? Ведь в идее можно по отдельности тестировать каждый метод. Чем это не юнит тест?)

    • @shurik_codes
      @shurik_codes  8 місяців тому

      Важна разница между модульными и интеграционными тестами. Модульные должны максимально изолированно тестировать разрабатываемую логику и должны выполняться как можно быстрее. Интеграционные тесты в свою очередь тестируют связки компонентов и их взаимодействие с какими-то внешними инструментами (фреймворками, базами данных и т.д.), следовательно, они более ресурсоёмкие и занимают больше времени.
      Можно ли писать модульные тесты в интеграционных тестах? По факту - да, никто и ничто не запрещает этого делать. Но для запуска интеграционного теста (в контексте Spring) требуется запуск контекста приложения в том или ином его виде, что требует времени и ресурсов. И в результате получается какая-то странная ситуация - мы сначала запускаем контекст приложения, а затем выполняем модульный тест, которому этот контекст по факту не нужен. Более того, при таком подходе может и будет возникать ситуация, когда сначала выполняется какое-то количество интеграционных тестов, а лишь затем очередь доходит до модульных, а одна из задач модульных тестов заключается в как можно более раннем выявлении ошибок.
      Поэтому я стараюсь отделять модульные тесты от интеграционных и выполнять их на разных этапах сборки проекта (test и verify соответственно в Maven). Если ошибка выявляется модульными тестами, то это будет происходить достаточно быстро на ранних этапах сборки проекта, ещё до того, как сборка дойдёт до выполнения интеграционных тестов. Это в целом даже выгоднее с точки зрения использования ресурсов в CI/CD.

  • @SlevySoddik
    @SlevySoddik 9 місяців тому

    Спасибо за видео! и как обычно вопрос: что делать если функционал который нужно протестировать зависит от другого? пример: есть рабочий процесс из 10 шагов(раскидано по 10-15 API), последний шаг без добавления и обработки данных по всем предыдущим шагам протестировать не возможно. Вариант решения видел такой - поднят докер тестконтейнер и шарит БД на все тестируемые методы(позитивные и негативные сценарии) - насколько это ок? хоть вариант и рабочий, но выглядит не очень.

    • @user-007-1
      @user-007-1 9 місяців тому

      Замокать эти апи, как вариант. Вайрмок вроде позволяет задать джсоном ответ на джсон-респонс.

    • @SlevySoddik
      @SlevySoddik 9 місяців тому

      @@user-007-1 к сожалению ответом от API был не json, а csv

    • @shurik_codes
      @shurik_codes  9 місяців тому

      Есть два подхода:
      1. Тестирование всего бизнес-процесс, такой подход в целом популярен при написании тестов для BPM.
      2. Индивидуальное тестирование каждого шага. В целом я не вижу в этом проблем - состояние системы перед выполнением шага можно смоделировать, заполняя БД тестовыми данными.

  • @AlexSmile-y2x
    @AlexSmile-y2x 8 місяців тому +1

    Помимо тестирования логики кода, часто используются линтеры и всякого рода дополнительные стат.анализаторы, но тут у Вас об этом нет, вы не используете такое в своих проектах?

    • @shurik_codes
      @shurik_codes  8 місяців тому

      Использую сонар в своих проектах

    • @AlexSmile-y2x
      @AlexSmile-y2x 8 місяців тому

      @@shurik_codes а почему в этом цикле видео не показали? или планируется во втором сезоне?🙂 это же все таки важная часть разработки

    • @shurik_codes
      @shurik_codes  8 місяців тому

      Изначально не было в планах, может быть, ролик появится как продолжение серии

  • @danil2590
    @danil2590 7 місяців тому

    Жизненный момент на моменте 49:00 😂

  • @БогданПрядко-щ7л
    @БогданПрядко-щ7л 9 місяців тому

    Здравствуйте
    Подскажите ,пожалуйста ,какие книги читать java backend разработчику
    Имеется ввиду человеку ,у которого уже неплохая база есть
    Спасибо заранее ❤

    • @shurik_codes
      @shurik_codes  9 місяців тому +3

      - Книги Роберта Мартина (в первую очередь "Чистый код" и "Чистая архитектура")
      - Паттерны объектно-ориентированного программирования
      - Книги про алгоритмы и структуры данных (Грокаем алгоритмы, Алгоритмы Скиены и Стивенса)
      - Книги посвящённые предметно-ориентированному проектированию (синюю и особенно красную)
      - Реактивные шаблоны проектирования

    • @AlexSmile-y2x
      @AlexSmile-y2x 8 місяців тому

      @@shurik_codes кстати, Александр, насчет DDD, как относитесь к rich model, использовал ли хоть раз хотя бы в пет-проектах? имхо крутой подход - очень упрощает написание фич, снижает баги и делает кодовую базу валидации модели и всех бизнес-процессов более естественной

    • @shurik_codes
      @shurik_codes  8 місяців тому

      @@AlexSmile-y2x Отношусь положительно, использую в реальных проектах

    • @AlexSmile-y2x
      @AlexSmile-y2x 8 місяців тому

      @@shurik_codes как считаете, почему этот подход менее популярен, чем стандартный с анемичной моделю?

    • @shurik_codes
      @shurik_codes  8 місяців тому

      @@AlexSmile-y2x сложнее во многих аспектах проектирования и проработки

  • @hurricane-rus
    @hurricane-rus 6 місяців тому

    Не понял, зачем при настройке тест-контейнеров в ямле задавать для них url, username и password - все эти данные генерятся контейнером автоматически, и все равно прямого доступа к поднимаемой бд не будет. По-моему оптимальнее делать отдельный конфигурационный класс, который имплементит ApplicationContextInitializer, а дальше просто подключать его через ContextConfiguration в те классы, где есть тесты с тест-контейнерами

    • @shurik_codes
      @shurik_codes  6 місяців тому

      Логин/пароль указывать не нужно, да, но вот создавать отдельный конфигурационный класс оптимальнее явно не будет, т.к. для запуска контейнера с БД достаточно указать специфичный для TC URL: java.testcontainers.org/modules/databases/jdbc/#database-containers-launched-via-jdbc-url-scheme

  • @ГенрихАвдеев-ь9з
    @ГенрихАвдеев-ь9з 9 місяців тому +2

    @shurik_codes
    Не могу понять, почему контекст интеграционного теста в вашем примере запускается без проблем. У меня требует dataSource. Анализ вашего репозитория не выявил каких-то специальных настроек, конфигов или моков в тестовом окружении.
    Я явно указал настройки постгри в ямле тестового окржения, после этого ИТ заработал, но хотелось бы понять, в чем магия, почему у вас работает без этой настройки.

    • @shurik_codes
      @shurik_codes  9 місяців тому

      47:40

    • @ГенрихАвдеев-ь9з
      @ГенрихАвдеев-ь9з 9 місяців тому +1

      @@shurik_codesДа, я подумал, что нужно уточнить, что речь про модуль менеджера, а не каталога, но отвлекся и не поправил. С каталогом все понятно, а в менеджере нет тестового контейнера постгреса, нет настроек в ямле, при этом работает в видео, но не работает локально.

    • @ji1ja
      @ji1ja 9 місяців тому

      @@ГенрихАвдеев-ь9з Уберите депенденси spring-data из проекта менеджера, она там не нужна)

    • @romanchernukha2583
      @romanchernukha2583 9 місяців тому

      @@ГенрихАвдеев-ь9з аналогичная ситуация

    • @aleksandrguskov5908
      @aleksandrguskov5908 9 місяців тому

      @@ГенрихАвдеев-ь9з Аналогичная ошибка возникает. Удалось разобраться?

  • @Царь_Грядет
    @Царь_Грядет 2 дні тому

    почему происходит конфликт айдишников с файла product.sql и реальными данными в бд? не дает положить id1,2,3 и тд, говорит уже имеется. дроп бд спасает, но все же это ведь вообще не выход) после окончания тестов, как и предполагалось, бд пустая, а сиквен заполняется.