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

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 ธ.ค. 2024

ความคิดเห็น • 141

  • @simplechannel7859
    @simplechannel7859 6 ปีที่แล้ว +43

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

  • @alexandrstroghov4000
    @alexandrstroghov4000 3 ปีที่แล้ว +3

    В `MainController.addMessage` вместо
    `return "main"`
    сделал редирект
    `return success ? "redirect:/main" : "main"`.
    При тестировании возникла проблема "Premature end of file" (класс `MainControllerTest.addMessageTest`).
    Решение. Сначала проверяем на
    `.andExpect(authenticated()).andExpect(status().is3xxRedirection())
    .andExpect(redirectedUrl("/main"))`
    (как в `LoginTest.correctLoginTest`),
    а потом еще раз `mockMvc.perform(get("/main"))`
    и далее как в видео.
    Автору огромное спасибо за материал!

    • @captainblackbeard9104
      @captainblackbeard9104 ปีที่แล้ว

      Спасибо, целый день игрался, и ни за что бы не додумался, что надо тестить в два захода.

  • @adiletzhuzupbekov9530
    @adiletzhuzupbekov9530 5 ปีที่แล้ว +5

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

  • @andrei8299
    @andrei8299 3 ปีที่แล้ว +5

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

    • @МаксимКириченко-э5т
      @МаксимКириченко-э5т 2 ปีที่แล้ว

      Он сам ускоряет перед загрузкой в 2 раза, сверху можно обратить внимание на время)

  • @DarthJaxxFather
    @DarthJaxxFather 6 ปีที่แล้ว +4

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

  • @KeonieD
    @KeonieD 4 ปีที่แล้ว +5

    Если у кого-то будет выдавать ошибку в тесте mainPageTest, когда мы смотрим что у нас в навбаре - xpath может брать значение с кучей пробелов и тест будет падать хотя значение самой строки вроде тоже. нужна функция normalize-space для xpath
    Выглядеть будет как-то так:
    xpath("normalize-space(//*[@id='navbarSupportedContent']/div)").string("admin")

  • @alexandrmakarevich5334
    @alexandrmakarevich5334 6 ปีที่แล้ว +11

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

  • @МихаилБесфамильный-о6ч
    @МихаилБесфамильный-о6ч 6 ปีที่แล้ว +15

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

    • @xirurr
      @xirurr 5 ปีที่แล้ว +3

      С такими настройками не заработало.
      Получилось вот так :
      messages-list-before.sql >
      delete from message;
      delete from hibernate_sequence;
      сообщения...
      insert into hibernate_sequence values (10);

    • @МихаилБесфамильный-о6ч
      @МихаилБесфамильный-о6ч 5 ปีที่แล้ว

      @@xirurr У MySQL нет секвенций, поэтому создавать и пихать что-то в таблицу секвенций бессмысленно.

    • @АлександрМоскаленков-з6й
      @АлександрМоскаленков-з6й 5 ปีที่แล้ว

      Спасибо

    • @narimo2773
      @narimo2773 4 ปีที่แล้ว +1

      Для меня только такая комбинацтя сработала:
      alter sequence message_id_seq restart with 10;
      PostgreSQL 12.3 version

    • @lanalystan9581
      @lanalystan9581 4 ปีที่แล้ว

      @@xirurr Спасибо! Помогло!

  • @johnnystartup7951
    @johnnystartup7951 4 ปีที่แล้ว +1

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

    • @Sergei-kq8hk
      @Sergei-kq8hk 3 ปีที่แล้ว

      Низкий поклон тебе, мил человек! :)

  • @АлександрЮрченко-щ5л
    @АлександрЮрченко-щ5л 6 ปีที่แล้ว +12

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

  • @Andrzej3935
    @Andrzej3935 2 ปีที่แล้ว

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

  • @mikaketo8737
    @mikaketo8737 3 ปีที่แล้ว

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

  • @ВадимНаумов-л6х
    @ВадимНаумов-л6х 3 ปีที่แล้ว +1

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

  • @createdrop1725
    @createdrop1725 4 ปีที่แล้ว +2

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

  • @kostiantynvergelis2664
    @kostiantynvergelis2664 5 ปีที่แล้ว +1

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

  • @denorian51
    @denorian51 4 ปีที่แล้ว +7

    Если вы на 10 минуте и вас не проходит correctLoginTest то скорее всего у вас тесты смотрят не в ту базу, и нужно сделать в классе аннотацию @TestPropertySource("/application-dev.properties")

    • @duckpool288
      @duckpool288 4 ปีที่แล้ว

      мерси

    • @noNameNoFear1234
      @noNameNoFear1234 3 ปีที่แล้ว

      Александр, спасибо огромное. 3 дня искал это. Нагуглить не смог, а тут ваш коммент.

  • @Сергей-ш3ы8ф
    @Сергей-ш3ы8ф ปีที่แล้ว

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

  • @TheLeony2
    @TheLeony2 6 ปีที่แล้ว +10

    велике дякую що находиш час на відео)

  • @johnrambo6996
    @johnrambo6996 3 ปีที่แล้ว +6

    Не совсем понял смысл теста 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())
    .andExpect(redirectedUrl("/login?error"));
    }
    или я не так понял смысл теста?

    • @Sergey-lz5wn
      @Sergey-lz5wn ปีที่แล้ว +1

      почти, в вашем тесте не хватает после .param(username) ещё .param("password", "somePassword"). Иначе будет всегда ошибка

  • @D.P._
    @D.P._ 5 ปีที่แล้ว +1

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

  • @inc.1424
    @inc.1424 5 ปีที่แล้ว +2

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

  • @rudolfsikorsky7900
    @rudolfsikorsky7900 2 ปีที่แล้ว +1

    Чтобы найти все незакрытые тэги может потребоваться поиск по всему проекту: CTRL + SHIFT + F

  • @andrei8299
    @andrei8299 3 ปีที่แล้ว +1

    вопрос по тестированию MainController. В sql-скриптах для тестов мы чистим таблицы и потом заносим в них данные. Я что-то не отразил, а каким образом они у нас создались вообще в бд первоначально. Подумал, что это благодаря свойству ...ddl-auto в properties, но он же у нас задан как validate, те не создаются таблицы автоматически, как я понял.
    Работает только, если я задаю update вместо validate.
    update. Сам себе отвечу. Только сейчас понял, что тут в проекте использовался flyway, далее нашел db/migration в ресурсах и врубился

  • @aleksei4604
    @aleksei4604 4 ปีที่แล้ว

    Спасибо, Андрей. Открывай свою школу))

  • @DeamondGod865
    @DeamondGod865 3 ปีที่แล้ว +2

    а из какого класса импортировать get("/")?

  • @Сергей-и8ж7в
    @Сергей-и8ж7в ปีที่แล้ว

    Все видосы просто потрясающие, но конкретно этот с первого и даже со второго раза не заходит. После половины вообще потерялся) Видимо придется возвращаться к этой теме позже

  • @koneckonca2183
    @koneckonca2183 5 ปีที่แล้ว +2

    была у кого-нибудь такая проблема: Spring норм поднимается, если запускать через мавен plugin run, при запуске через зелёный треугольник, то падает из-за того что не все бины инициализировались. Мб каких конфигов не хватает?

  • @Женя-р8ц3й
    @Женя-р8ц3й 2 ปีที่แล้ว +1

    Ты мега крут!

  • @victormog
    @victormog 6 ปีที่แล้ว +6

    Может ошибусь, но, imho, большинству подписчиков было бы не плохо объяснить вначале сам механизм тестирования с помощью JUnit...
    По-моему, слишком круто с места в карьер!

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +9

      будут и модульные тесты. Интеграционные легче понять в плане логики "что тестируем", unit тесты сложнее в восприятии, ибо тестируем не какой-то функционал, а что-то более абстрактное и сфера примерения уже. Я не сторонник написания юнит тестов для сервисов, которые что-то из БД тянут (которую еще и подменяют на H2). Юнит тесты в идеале должны тестировать чистые функции, чтобы не пришлось много mock объектов создавать

    • @victormog
      @victormog 6 ปีที่แล้ว +2

      Вот об этом я и говорю - я, например, про тесты знаю, только то, что Maven библиотеку JUnit автоматически прибавляет в pom-файл.
      И написал про JUnit, потому что увидел, что аннотации у Вас от этой библиотеки.
      А про сам механизм тестирования могу только догадываться (молчу уже про его градации - "интеграционные", "модульные" и т.п. - вообще чума!).

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +4

      Мир тестов не менее разнообразие, чем мир разработки :)

    • @victormog
      @victormog 6 ปีที่แล้ว +2

      letsCode
      Тогда беда... в моём случае так точно!

  • @aleksei4604
    @aleksei4604 4 ปีที่แล้ว +1

    Благодарю за материал!

  • @nikitaantonenko3287
    @nikitaantonenko3287 4 ปีที่แล้ว

    Спасибо огромное)) Видео просто супер!!!)))))

  • @beka6336
    @beka6336 4 ปีที่แล้ว +3

    Однозначно крутой ролик.
    У меня есть вопрос, в строку @SpringBootTest мне приходится добавлять (classes = {Application.class}) точка запуска моего приложения, можете сказать почему у меня не работает без него?

    • @faniskhalikov9736
      @faniskhalikov9736 2 ปีที่แล้ว +1

      Вот спасибо тебе, хороший человек )) Час копал, почему у меня ошибки сыплет. Прописал точку запуска - всё заработало!

    • @ВладУкраинец-ь3р
      @ВладУкраинец-ь3р ปีที่แล้ว

      Ты меня спас своим коментарием) Второй час копаю почему не работает, а тут все так просто!

  • @ИванРоманов-ц5э
    @ИванРоманов-ц5э 5 ปีที่แล้ว +1

    В общем столкнулся с весьма неприятной ситуацией. Если кто захочет всё это делать на Kotlin то учтите что Repetable annotation не поддерживаются до сих пор. То есть выполнить аннотацию @Sql before и следом поставить @Sql after не получится. В гайдах у спринга нашел что в тестах можно использовать такие аннотации у функций как @BeforeAll и @AfterAll которые собственно означают что данная функция исполняется до остальных либо после. В общем пришлось создавать отдельный класс компонент в котором заавтовайрил JdbcTemplate и уже в нём руками написал теже запросы что и были созданы в ресурсах.

  • @АндрейФетисов-ш7в
    @АндрейФетисов-ш7в 5 ปีที่แล้ว +2

    Автору как всегда - респект. Подскажите , не проходит последний тест (addMessageToListTest). Что это может быть. Искал - не нашёл. С Вашими исходниками сверял. Подскажите , где искать?. Спасибо
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:
    ==> message.id [in template "parts/messageEdit.ftl" at line 37, column 68]
    ----
    Tip: It's the step after the last dot that caused this error, not those before it.
    ----
    Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use when-presentwhen-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
    ----
    ----
    FTL stack trace ("~" means nesting-related):
    - Failed at: ${message.id} [in template "parts/messageEdit.ftl" at line 37, column 66]
    - Reached through: #include "parts/messageEdit.ftl" [in template "main.ftl" at line 17, column 1]
    ~ Reached through: #nested [in template "parts/common.ftl" in macro "page" at line 20, column 9]
    ~ Reached through: @c.page [in template "main.ftl" at line 3, column 1]

  • @JustMoreyl
    @JustMoreyl 6 ปีที่แล้ว +2

    Спасибо Дрю!!!

  • @РоманИванов-ъ2з
    @РоманИванов-ъ2з ปีที่แล้ว

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

  • @vitaliyaltsev5405
    @vitaliyaltsev5405 6 ปีที่แล้ว +3

    У меня тест badCredentials не проходит почему-то, хотя код такой же. Expected :403
    Actual :302. Почему так?

    • @andrei8299
      @andrei8299 3 ปีที่แล้ว +1

      потому что он тебя редиректит на другую страницу. У себя я немного поменял тест и он прошел (у меня идет редирект на страницу с параметром error):
      .andExpect(status().is3xxRedirection())
      .andExpect(redirectedUrl("/showMyLoginPage?error"));

  • @alexart6024
    @alexart6024 4 ปีที่แล้ว +1

    Добрый день. Спасибо за отличные видео. У меня вопрос, может кто подскажет. Если я на добавление сообщения поставил редирект, то у меня не отрабатывает тест на добавление сообщения. Куда и как правильно указать редирект чтобы тест проходил?

  • @Karately1225
    @Karately1225 6 ปีที่แล้ว +7

    Привет, спасибо за уроки, можешь объяснить про, web socket (а точнее разработка на spring web messenger) если можно, так же на этом примере.
    Заранее спасибо!

    • @Slesh85
      @Slesh85 6 ปีที่แล้ว

      Поддерживаю, будет полезно!

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +11

      Websocket будет, не переживайте

  • @Евгений-ч9к2ф
    @Евгений-ч9к2ф 5 ปีที่แล้ว +1

    почему то не работает фишка по переклучению баз данных.. может кто знает в какую сторону хотя бы копать ?

  • @ivsergey5150
    @ivsergey5150 6 ปีที่แล้ว +6

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

  • @romanmotovilov129
    @romanmotovilov129 4 ปีที่แล้ว +1

    Кто-то может подсказать какой screen recorder использует автор? Спасибо!

  • @DarthJaxxFather
    @DarthJaxxFather 6 ปีที่แล้ว +1

    У меня почему-то постоянно выпадает 405 ошибка на последнем тесте и ссылается на 80 строку.

  • @xirurr
    @xirurr 5 ปีที่แล้ว +2

    С ломбоком (@Data) не проходит тесты. Сначала теряется сесссию( лечится запуском теста с аннотацией @Transactional), потом вываливается в StackoverflowError
    .

    • @soul8927
      @soul8927 5 ปีที่แล้ว

      как-то решил это или просто откатился до времен без ломбока?

    • @Mrandrewgolovko
      @Mrandrewgolovko 5 ปีที่แล้ว

      Та же ошибка. Кто нашел уже решение?

    • @sergeyserg2477
      @sergeyserg2477 4 ปีที่แล้ว +1

      Помогите с лумбуком...

    • @narimo2773
      @narimo2773 4 ปีที่แล้ว +1

      StackoverflowError
      fails for toString() generated by @Data.
      Declare it directly for each entity:
      - Message: @ToString(of = {"id", "text", "tag"})
      - User: @ToString(of = {"id", "username", "active", "email"})

  • @evgheniievghenia8043
    @evgheniievghenia8043 5 ปีที่แล้ว +1

    Доброго времени суток. Автору спасибо за видео. У меня две проблемы в этой теме
    badLogin
    выводит 302 статус , а не 403. Тест не проходит.
    correctLoginTest()
    редирект делает на login?error, в место той странице которую задаю я.
    помогите разобраться.

    • @andrei8299
      @andrei8299 3 ปีที่แล้ว

      я у себя сделал так (не знаю, правильно ли, вроде ок):
      .andExpect(status().is3xxRedirection())
      .andExpect(redirectedUrl("/showMyLoginPage?error"));

  • @VasillaRobocraft
    @VasillaRobocraft ปีที่แล้ว

    А в чем проблема кидать данные в базу один раз перед всеми тестами, пометив сами тесты как @Transactional, чтобы все изменения после завершения теста откатывались?

  • @darkinrall861
    @darkinrall861 5 ปีที่แล้ว +1

    Привет. Если можно, сможешь сделать урок по тестированию с использованием Spock?

  • @joi3545
    @joi3545 4 ปีที่แล้ว

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

  • @mustache_mentor
    @mustache_mentor 9 หลายเดือนก่อน +1

    Лучше использовать конечно инжект через конструктор в тестах вместо @Autowired

  • @МаксимСтепанов-р2й4у
    @МаксимСтепанов-р2й4у 4 ปีที่แล้ว +1

    Как всегда👍

  • @zigzag2341
    @zigzag2341 3 ปีที่แล้ว

    Евгений борисов использовать аннотацию springboottest не рекомендует, слишком тяжелая. Лучше использовать webmvctest и конфигурацию с бинами и моки.

  • @alexandrguravskiy9985
    @alexandrguravskiy9985 6 ปีที่แล้ว +4

    Привет у меня проблем при mainPageTest()
    org.xml.sax.SAXParseException; lineNumber: 176; columnNumber: 3; The markup in the document following the root element must be well-formed.
    В чем может быть проблемммма?

    • @abaykerimov
      @abaykerimov 5 ปีที่แล้ว

      решили проблему?))

    • @kerne1
      @kerne1 4 ปีที่แล้ว

      Скопируй сюда свой шаблон и увидишь то, что не видно:validator.w3.org/nu/#textarea

    • @narimo2773
      @narimo2773 4 ปีที่แล้ว

      Дальше в логах идет описание проблемы: закритт тэг....

  • @therealyou632
    @therealyou632 4 ปีที่แล้ว +1

    MySQL
    У кого выдавало такую ошибку при запуске теста : Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails
    нужно в create-user-after и create-user-before перед удалением таблицы поставить SET FOREIGN_KEY_CHECKS=0;

  • @asd-xr9ii
    @asd-xr9ii 5 ปีที่แล้ว

    решая проблемы с MySQL пришлось изменить:
    - в messages-list-before.sql:
    DELETE FROM message;
    ALTER TABLE message AUTO_INCREMENT=1;
    INSERT INTO message(id, text, tag, user_id) VALUES
    (NULL, 'first', 'my-tag', 1),
    (NULL, 'second', 'more', 1),
    (NULL, 'third', 'my-tag', 1),
    (NULL, 'fourth', 'another', 1);
    ALTER TABLE message AUTO_INCREMENT=10;
    - в dommain/dto/message GenerationType у id = IDENTITY, а не AUTO:
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    - в SQL миграций у полей id добавить "auto_increment":
    create table message (
    id bigint not null auto_increment,

  • @Евгений-ч9к2ф
    @Евгений-ч9к2ф 5 ปีที่แล้ว

    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    Caused by: org.postgresql.util.PSQLException: ОШИБКА: UPDATE или DELETE в таблице "usr" нарушает ограничение внешнего ключа "user_subscriptions_channel_id_fkey" таблицы "user_subscriptions"
    Подробности: На ключ (id)=(1) всё ещё есть ссылки в таблице "user_subscriptions".

  • @borismatashin5891
    @borismatashin5891 4 ปีที่แล้ว

    Дрю делает вещи)

  • @veragerasimenko5213
    @veragerasimenko5213 4 ปีที่แล้ว +1

    Большое спасибо !

  • @AlexSmile-y2x
    @AlexSmile-y2x 4 ปีที่แล้ว

    супер, только не совсем ясно, для чего в каждом тесте обращаться к mockMvc через this.mockMvc? почему нельзя писать просто mockMvc?

  • @yuriyroskoshinsky9394
    @yuriyroskoshinsky9394 4 ปีที่แล้ว +1

    Чётенько )

  • @simplechannel7859
    @simplechannel7859 6 ปีที่แล้ว +2

    Круто!

  • @rustammamedov2902
    @rustammamedov2902 5 ปีที่แล้ว +2

    большое спасибо!

  • @mika2557
    @mika2557 5 ปีที่แล้ว +2

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

  • @zigzag2341
    @zigzag2341 3 ปีที่แล้ว

    А не проще добавлять пользователей и записи для тестов не через sql, а через репозитории в коде?

  • @phil2964
    @phil2964 4 ปีที่แล้ว

    Очень содержательное видео

  • @alexpanasyuk4696
    @alexpanasyuk4696 5 ปีที่แล้ว +1

    Знаю тупой вопрос но почему в тесте логина с плохими кренделями у нас статус 403(forbidden) а когда логинимся неуспешно статус 302 редирект на страницу логина?
    P.S: сорри за мой русский я укр

    • @letsCodeDru
      @letsCodeDru  5 ปีที่แล้ว +1

      Норм у тя русский :)
      Потому что в случае плохих кренделей ты ошибся в вводе данных, а при попытке входа без кренделей, ты вообще данных не предоставил. Разный вход - разный выход :)

    • @alexpanasyuk4696
      @alexpanasyuk4696 5 ปีที่แล้ว +1

      @@letsCodeDru Наверное плохо описал ситуацию но я имел в виду что когда я логинюсь в браузере и задаю неправильные параметри то в окне проверить (ctrl+shift+i) network пишет статус 302 и происходит редирект вместо 403 :(
      Upd:1 Если поменять post() на formlogin() тест валиться , логи: Expected :403
      Actual :302
      Upd2: Нужно добавить .with(csrf()) иначе будет 403 вот мой тест gist.github.com/Alex12367/6e2d02e9da41a05e97cc8dfa86153cf2
      Upd3: Забыл сказать спасибо за уроки Дрю :)

    • @alexpanasyuk4696
      @alexpanasyuk4696 5 ปีที่แล้ว

      @@letsCodeDru Надо было просто досмотреть видео до конца и в последном тесте есть решения :(

  • @ivanromanenko1092
    @ivanromanenko1092 4 ปีที่แล้ว

    Профессионально!

  • @Denis-wq5hn
    @Denis-wq5hn 6 ปีที่แล้ว

    Спасибо за видосы. Может кто подскажет как протестировать input (когда редактируешь сообщение). Единственное что понял так это проверить на наличие самого input .andExpect(xpath("//input[@id='inputMSG']").exists()). Как узнать value?

  • @olehold
    @olehold 3 ปีที่แล้ว

    Спасибо тебе ЧЕловечищее

  • @AlexKorotkov
    @AlexKorotkov 5 ปีที่แล้ว +2

    простите, выглядит будто controller не нужен?

    • @narimo2773
      @narimo2773 4 ปีที่แล้ว

      indeed for MainControllerTest

  • @victormog
    @victormog 6 ปีที่แล้ว +5

    Один глупый вопрос: _зачем столько много кода (тестирование HTML, например), если можно запустить и увидеть всё глазами?_

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +17

      Затем, что когда у тебя больше 20 страниц на сайте, ты забьёшь проверять все страницы после каждого изменения и пропустишь ошибку. Более того, что в 90% случаев ты даже не угадаешь, что именно может отвалиться, когда ты правишь какой-то сервис, ибо в голове всего не удержишь. С ростом приложения количество таких мест только будет расти

    • @victormog
      @victormog 6 ปีที่แล้ว +2

      Ok!
      Убедительно!

  • @vadimlagutin4928
    @vadimlagutin4928 6 ปีที่แล้ว

    Хочу с помощью интеграционных тестов проверить добавление пользователя. Тест ругается на капчу. Как правильно сымитировать проверку капчи?

    • @letsCodeDru
      @letsCodeDru  6 ปีที่แล้ว +3

      Captcha в тестах не надо проверять. Т.е. надо добавить проперти в окружение, которое будет отключать проверку Captcha для тестов

    • @vadimlagutin4928
      @vadimlagutin4928 6 ปีที่แล้ว +5

      @@letsCodeDru Подскажите, пожалуйста, какое нужно добавить проперти? Не могу найти нигде.

  • @ВладимирКрят-н6з
    @ВладимирКрят-н6з 3 ปีที่แล้ว

    Best! Спасибо

  • @YuretsUA
    @YuretsUA 5 ปีที่แล้ว

    Блин, падает MainControllerTest
    org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.
    И неясно даже на каком файле, все файлы проверил, на первой позиции у всех находится , может символ какой-то запрещенный или корявый, типа BOM.

    • @YuretsUA
      @YuretsUA 5 ปีที่แล้ว

      Как говорят от дурной головы....
      Разобрался, у меня нет страницы "/main" и в итоге Dom parser пытался распознать несуществующую страницу, уже позже воссоздав тест с тестовой страницей "/test" понял, что в статусе запроса пишет следующую информацию:
      ......
      MockHttpServletResponse:
      Status = 404
      .....
      тоесть страницы не существует, если кто столкнется с ошибкой lineNumber: 1; columnNumber: 1; Premature end of file. - значит в первую очередь проверьте а есть ли запрашиваемая страница. Потому как тесты:
      @Test
      @WithUserDetails("Admin")
      public void mainPageTest() throws Exception{
      this.mockMvc.perform(get("/main"))
      .andDo(print())
      .andExpect(authenticated());
      пройдут успешно, а при попытке получить контент получите ошибку.

  • @danila9853
    @danila9853 ปีที่แล้ว

    Спаси Бог.

  • @D.P._
    @D.P._ 4 ปีที่แล้ว

    @Dru сколько времени у тебя уходит на то что-бы вот в этом все разобраться? Просто смотрю не могу оторваться, и понимаю, какой объем инфы нужно перелопатить, что-бы вникнуть!
    А еще вот это: "...и для этого есть аннотация, и для этого, и ....∞ " и походу это только вершина айсберга))

    • @letsCodeDru
      @letsCodeDru  4 ปีที่แล้ว +4

      Именно. Мне жизни не хватит по всему спрингу видосов наснимать

  • @ИльяКвитковский-г9л
    @ИльяКвитковский-г9л 5 ปีที่แล้ว

    XPath //div[@id='message-list']/div[@data-id=10] does not exist
    java.lang.AssertionError: XPath //div[@id='message-list']/div[@data-id=10] does not exist
    У кого то была такая ошибка?
    помогите пожалуйста в решении, который час уже сижу

    • @narimo2773
      @narimo2773 4 ปีที่แล้ว

      Solved for my Postgres DB: alter sequence message_id_seq restart with 10;

  • @romantsyupryk3009
    @romantsyupryk3009 5 ปีที่แล้ว +1

    Thank you so much.

  • @56scoch56
    @56scoch56 6 ปีที่แล้ว +1

    Супер

  • @Andrzej3935
    @Andrzej3935 2 ปีที่แล้ว

    Спасибо!

  • @egos_ua
    @egos_ua 3 ปีที่แล้ว +1

    Спасибо за подробные и наглядные примеры, видео полезное. Но монтаж... я бы лучше посмотрел полную версию в час и 20 минут чем настолько дерганый монтаж, от которого просто голова закипает

  • @narimo2773
    @narimo2773 4 ปีที่แล้ว

    Much better xpath will: "//div[@id='message-list']/div" instead of "//*[...]"

  • @ДмитрийГрибанов-л7г
    @ДмитрийГрибанов-л7г 3 ปีที่แล้ว

    Все очень здорово и по делу, НО очень сильно спешишь. Можно немного помедленнее.

  • @ВалентинГлобалов
    @ВалентинГлобалов 6 ปีที่แล้ว

    78 common frames omitted

  • @timurvolkov9262
    @timurvolkov9262 4 ปีที่แล้ว

    земля пухом тем, кто как и я мог оставлять незакрытые тэги, типа вместо

  • @uawinwin
    @uawinwin 4 ปีที่แล้ว

    на MVCшном гомне аж до 2018 года писали. Думал оно уже засохло давным давно.

  • @ayrat11
    @ayrat11 4 ปีที่แล้ว

    Как то очень медленно всё.

  • @febrgij4ot849rvnriv
    @febrgij4ot849rvnriv 3 ปีที่แล้ว

    Очень медленно, можно ещё паузы между словами убирать и х2

  • @fpsbard7267
    @fpsbard7267 5 ปีที่แล้ว +3

    Как сложно и не понятно автор подаёт материал

    • @ms_shifu7047
      @ms_shifu7047 5 ปีที่แล้ว +16

      Полностью согласен. Хотим больше HelloWorldов и видосы, по типу какой язык программирования выбрать в 2019-2020 гг.

    • @АндрейФетисов-ш7в
      @АндрейФетисов-ш7в 5 ปีที่แล้ว +3

      @@ms_shifu7047 улыбнуло

  • @ivvasch
    @ivvasch 2 ปีที่แล้ว

    Оставлю на всякий случай:
    не сразу разобрался почему у меня последние 2 теста по data-id не проходили. Оказалось, что помимо тегов, которые указывает автор, необходимо смотреть еще и на свои теги, которые Вы могли добавить когда оформляли приложение. У меня это выглядело так:
    --------------------------------

  • @D.P._
    @D.P._ 5 ปีที่แล้ว +2

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

  • @SiyovushTuychiev
    @SiyovushTuychiev 2 ปีที่แล้ว

    Спасибо!

  • @АлександрБондарев-ъ7ф
    @АлександрБондарев-ъ7ф 5 ปีที่แล้ว

    Супер

  • @D.P._
    @D.P._ 5 ปีที่แล้ว +1

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

  • @D.P._
    @D.P._ 5 ปีที่แล้ว +1

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

  • @nailtagiyev6340
    @nailtagiyev6340 2 ปีที่แล้ว

    Спасибо большое

  • @D.P._
    @D.P._ 5 ปีที่แล้ว +1

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

  • @D.P._
    @D.P._ 5 ปีที่แล้ว +2

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