Spring на практике - Spring Boot и тестирование

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024
  • ХоббиХобби

Комментарии • 31

  • @GrabDuck
    @GrabDuck  4 года назад +1

    Работа в IT Германия! Ищем сотрудника для работы в немецкой команде
    Backend developers! Java,Spring, web development
    Tech Slack:
    - Java
    - Spring Framework
    - Microservices
    - swagger / open API
    - kubernetes / docker
    - PostgreSQL Mongo DB
    - Pluspunkt: Camunda BPM, Solr
    Experience 4 years + desired
    This is a great opportunity to join a team with a modern and friendly culture.
    Sent your CV at info@econor.io
    Поддержка на первое время в Германии!

  • @useitfreee5467
    @useitfreee5467 5 лет назад

    Очень дельное видео, всё по теме, без байды, структурировано, да ещё и попутно полезные фичи подсказываете. Спасибо!

  • @nullnull9057
    @nullnull9057 6 лет назад +6

    Боже, Ваши уроки просто великолепны!

  • @GrabDuck
    @GrabDuck  8 лет назад +4

    Онлайн-курс от GrabDuck.com:
    Какие возможности предоставляются в Spring Boot для тестирования. Делаем простейший unit test контроллера с использование JUnit, Mockito и Harmcrest. Как добавить необходимые @Autowired зависимости в тестовый класс с помощью Mockito. Как проверить с помощью Mockito, что были вызваны определенные методы.
    Смотрим, что такое библиотека Lombok и какие преимущества она дает при работе с моделью данных. Как автоматически уменьшить количество boilerplate кода в POJO объектах и определить getters, setters, конструкторы и другие полезные методы автоматически с помощью Lombok.
    Что такое интеграционное тестирование и как создать полноценный интеграционный тест с использованием Spring Boot. Как подключить для тестирования embedded mongo и проинициализировать базу данных специально подготовленными тестовыми данными. Создаем интеграционный тест, который запускает Spring Boot приложение целиком, осуществляет REST запрос к тестируемому серверу с использованием RestTemplate и проверяет полученные данные на корректность.
    Приглашаем Вас регистрироваться на grabduck.com

  • @jerrymerezhanyi7535
    @jerrymerezhanyi7535 5 лет назад

    Спасибо за видео!

  • @simplechannel7859
    @simplechannel7859 6 лет назад +1

    Круто! Спасибо!

  • @armenabrahamyan1309
    @armenabrahamyan1309 5 лет назад

    я скачал dependency mongodb embedded и добавил application.properties в папке resource для тестирование, но все равно у меня запускается тот который на production-е, не понимаю из за чего

  • @infectedfly
    @infectedfly 7 лет назад +1

    Спасибо за Ваши видео уроки. Я наверно делаю что-то не так, но у меня в тесте почему-то идет запрос (localhost) к уже существующей БД, а не тестовой. Если сервер отключаю, то выскакивает ошибка. Соответственно, этот тест не проходит. Надо попробовать скачать Ваш поимер с github и посмотреть.

  • @vladislavosipenkov1412
    @vladislavosipenkov1412 6 лет назад

    А интеграционные тесты сами должны поднимать приложение или их запускают поверх работающего приложения?

  • @aziaev
    @aziaev 7 лет назад

    Я делал тесты вызова метода как в начале видео. Но у меня при вызове метода он начинает проваливаться дальше и там уже натыкается на объекты и выкидывает NPE. Как сделать так, чтобы при вызове методов тестируемого метода он не вызывал методы которые находятся дальше внутри методов тестируемого?
    Например я делаю when(stackoverflowService.findall()).thenReturn(SomeObject) Он проваливается внутрь метода findall и падает. Хочу чтобы не уходил далеко

  • @rolypo1y
    @rolypo1y 6 лет назад

    Привет. А не подскажите как restTemplate.exchange использовать с параматезированным урлом ?

  • @ИльяСавинков-ш5с
    @ИльяСавинков-ш5с 7 лет назад +4

    Ну как то так, и не понятно чего это такое)
    I/O error on GET request for "localhost:8080/api/stackoverflow": В соединении отказано (Connection refused); nested exception is java.net.ConnectException: В соединении отказано (Connection refused)

    • @piboro
      @piboro 7 лет назад

      я указал порт в тестовых application.properties, и заработало

    • @Bogdan111
      @Bogdan111 7 лет назад

      тоже было такое, не знаю причину - просто рестартил приложение и потом снова запускал тест и все ОК.

  • @nikitaproit
    @nikitaproit 8 лет назад +5

    SpringApplicationConfiguration is deprecated and WebIntegrationTest, too :(

    • @GrabDuck
      @GrabDuck  8 лет назад +11

      Ага, вот она жизнь: не успеешь про что-то рассказать, а оно уже устарело :-D
      В данных случаях смотрите на описание аннотаций. Вместо @SpringApplicationConfiguration начиная с версии Spring Boot 1.4 нужно использовать @SpringBootTest. А @WebIntegrationTest получается больше не нужна, достаточно иметь только @SpringBootTest

    • @uawinwin
      @uawinwin 7 лет назад +1

      Спасибо за уточнение а можете подсказать еще. Вот вы говорите нужно использовать @SpringBootTest. А откуда вам это извесно? Я так понял из какойто таинственной документации? А где ее можно достать и как находить такие записи типо "Ей ребята мы спринг обновили теперь вместо тогото используйте то то а то вобще ненужно" поделитесь опытом плиз. Вы ведь не вечно будете ролики снимать... а я вечно буду програмировать)))

  • @aziaev
    @aziaev 7 лет назад

    Хорошее видео

  • @sergenikitin2134
    @sergenikitin2134 8 лет назад

    Просьба выложить исходники на гитхаб.

    • @GrabDuck
      @GrabDuck  8 лет назад +4

      ловите github.com/esurovtsev/SpringDemo но там все до кучи с другими уроками по Spring

  • @sresetnjak
    @sresetnjak 8 лет назад +1

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

    • @GrabDuck
      @GrabDuck  8 лет назад +1

      Verify() подразумевает, что вызов должен проходить один и только один раз. Но также verify() есть расширенная версия - verify(T mock, VerificationMode mode), где задавая mode вы можете как раз определить количество необходимых раз которое метод должен вызываться. Примеры вызовов:
      - verify(mock, times(5)).someMethod()
      - verify(mock, never()).someMethod()
      - verify(mock, atLeastOnce()).someMethod()
      - verify(mock, atLeast(2)).someMethod()
      - verify(mock, atMost(3)).someMethod()

    • @sresetnjak
      @sresetnjak 8 лет назад +1

      У меня часть тестов проходят, а один нет. Мне кажется я не очень понимаю что нужно вызывать.
      У меня есть:
      @Mock
      private MessageService messageService;
      @InjectMocks
      MessageController messageController;
      Тест проверяет методы контроллера, например если я проверяю
      messageController.getAllMessages();
      verify(messageService, times(1)).findAll();
      // то этот тест проходит если проверяю
      messageController.deleteMessage(ID);
      verify(messageService, times(1)).delete(ID);
      // этот не проходит, не найдет тикой ИД, но уже так
      messageService.delete(ID); он проходит
      я вот и не понимаю методы надо вызывать из мока, т.е. messageService? Но тогда вроде я не поверяю методы контроллера, а проверяю методы интерфейса.

  • @narekkarapetian9793
    @narekkarapetian9793 7 лет назад

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

  • @justden8682
    @justden8682 8 лет назад

    Спасибо!
    Вопрос- почему у меня не заработала lombok?
    Использую IntelliJ 2016.2.4
    В pom.xml добавил зависимость
    org.projectlombok
    lombok-maven
    1.16.10.0
    provided
    Делаю все так как в примере
    Пробую компилировать
    Error:(3, 14) java: package lombok does not exist

    • @GrabDuck
      @GrabDuck  8 лет назад

      Без Intellij Idea, если просто запускаете "mvn clean install" работает?

    • @justden8682
      @justden8682 8 лет назад

      С IntelliJ заработало после того, как в pom.xml прописалл зависимость следующим образом
      org.projectlombok
      lombok
      true
      Так генерирует эту зависимость IntelliJ по-умолчанию, если при создании нового проекта при помощи Spring Initializr выбрать Dependencies "Lombok"
      Теперь возникла новая проблема при запуске теста
      org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'my.first.demo.web.StackoverflowControllerIT': Unsatisfied dependency expressed through field 'mongoTemplate'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.mongodb.core.MongoTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
      Есть соображения по этому поводу?

    • @GrabDuck
      @GrabDuck  8 лет назад

      Из описания ошибки следует, что Spring не создал bean от класса MongoTemplate. Spring должен создавать данный бин сам, если зависимости на монго определены (если конкретно, то MongoDataAutoConfiguration отвечает за это). Почему это не сработало в тестовой конфигурации у вас, мне сложно сказать, что-то не так наверное в настройках (=Spring аннотациях) на классе StackoverflowControllerIT

    • @ЮрийСмирнов-б1н
      @ЮрийСмирнов-б1н 7 лет назад +2

      Нужно установить плагин и настроить поддержку аннотаций.
      Устанавливаем плагин: Settings -> Plugins -> Search in repositories -> в поиске вводим Lombok.
      После установки перезагружаем IntelliJ IDEA.
      Включаем обработку аннотаций Lombok: Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors.

  • @Mihail1985
    @Mihail1985 8 лет назад

    Спасибо!
    Но очень сложно если ты ни когда не писал интеграционные тесты, сильно много информации за один урок.
    Подскажите какую литературу стоит почитать что бы по лучше разбираться в этом?

    • @GrabDuck
      @GrabDuck  8 лет назад +4

      Спасибо за комментарий. Попробуем переснять несколькими частями и рассказать более подробно.
      По поводу вопроса, Unit-тесты активно писали? попробуйте начать с них и с TDD. я бы посидел на этой связке (unit + tdd) просто какое то время, пару месяцев, полгода. Если раньше этого не делали, то у вас даже стиль программирования измениться. Мне кажется как то так, потому что необходимость интеграционных тестов понятна, когда начинаешь понимать ограниченность unit тестов. Соответственно приходит понимание в чем различие, зачем они нужны, и как их делать :-)
      Книг особых, "изменивших мою жизнь раз и навсегда" не посоветую, так в процессе тут посмотришь, там почитаешь. Чего то такого, чтобы потом перечитать хотелось на эту тему у меня нет. по поводу TDD если дружны с английским, мне нравились эти видео - ruclips.net/video/F534zh9rsaA/видео.html