Работа в 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 Поддержка на первое время в Германии!
Онлайн-курс от 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
я скачал dependency mongodb embedded и добавил application.properties в папке resource для тестирование, но все равно у меня запускается тот который на production-е, не понимаю из за чего
Спасибо за Ваши видео уроки. Я наверно делаю что-то не так, но у меня в тесте почему-то идет запрос (localhost) к уже существующей БД, а не тестовой. Если сервер отключаю, то выскакивает ошибка. Соответственно, этот тест не проходит. Надо попробовать скачать Ваш поимер с github и посмотреть.
Я делал тесты вызова метода как в начале видео. Но у меня при вызове метода он начинает проваливаться дальше и там уже натыкается на объекты и выкидывает NPE. Как сделать так, чтобы при вызове методов тестируемого метода он не вызывал методы которые находятся дальше внутри методов тестируемого? Например я делаю when(stackoverflowService.findall()).thenReturn(SomeObject) Он проваливается внутрь метода findall и падает. Хочу чтобы не уходил далеко
Ну как то так, и не понятно чего это такое) I/O error on GET request for "localhost:8080/api/stackoverflow": В соединении отказано (Connection refused); nested exception is java.net.ConnectException: В соединении отказано (Connection refused)
Ага, вот она жизнь: не успеешь про что-то рассказать, а оно уже устарело :-D В данных случаях смотрите на описание аннотаций. Вместо @SpringApplicationConfiguration начиная с версии Spring Boot 1.4 нужно использовать @SpringBootTest. А @WebIntegrationTest получается больше не нужна, достаточно иметь только @SpringBootTest
Спасибо за уточнение а можете подсказать еще. Вот вы говорите нужно использовать @SpringBootTest. А откуда вам это извесно? Я так понял из какойто таинственной документации? А где ее можно достать и как находить такие записи типо "Ей ребята мы спринг обновили теперь вместо тогото используйте то то а то вобще ненужно" поделитесь опытом плиз. Вы ведь не вечно будете ролики снимать... а я вечно буду програмировать)))
Спасибо за видео. Вы делаете юнит тест на метод getListOfProviders, вроде все понятно, по аналогии сделал тесты на все свои методы, но нужно написать тест проверяющий колличество вызовов метода и не очень понимаю как это делается. Вроде понятно, что вызываешь метод несколько раз и потом подсчитываешь их, но на деле ни чего не выходит.
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()
У меня часть тестов проходят, а один нет. Мне кажется я не очень понимаю что нужно вызывать. У меня есть: @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? Но тогда вроде я не поверяю методы контроллера, а проверяю методы интерфейса.
Круто, но насколько я знаю, интеграционные тесты со спрингом проходят в рамках транзакций, и после каждого метода не нужно удалять данные с базы данных.
Спасибо! Вопрос- почему у меня не заработала 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
С 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)} Есть соображения по этому поводу?
Из описания ошибки следует, что Spring не создал bean от класса MongoTemplate. Spring должен создавать данный бин сам, если зависимости на монго определены (если конкретно, то MongoDataAutoConfiguration отвечает за это). Почему это не сработало в тестовой конфигурации у вас, мне сложно сказать, что-то не так наверное в настройках (=Spring аннотациях) на классе StackoverflowControllerIT
Нужно установить плагин и настроить поддержку аннотаций. Устанавливаем плагин: Settings -> Plugins -> Search in repositories -> в поиске вводим Lombok. После установки перезагружаем IntelliJ IDEA. Включаем обработку аннотаций Lombok: Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors.
Спасибо! Но очень сложно если ты ни когда не писал интеграционные тесты, сильно много информации за один урок. Подскажите какую литературу стоит почитать что бы по лучше разбираться в этом?
Спасибо за комментарий. Попробуем переснять несколькими частями и рассказать более подробно. По поводу вопроса, Unit-тесты активно писали? попробуйте начать с них и с TDD. я бы посидел на этой связке (unit + tdd) просто какое то время, пару месяцев, полгода. Если раньше этого не делали, то у вас даже стиль программирования измениться. Мне кажется как то так, потому что необходимость интеграционных тестов понятна, когда начинаешь понимать ограниченность unit тестов. Соответственно приходит понимание в чем различие, зачем они нужны, и как их делать :-) Книг особых, "изменивших мою жизнь раз и навсегда" не посоветую, так в процессе тут посмотришь, там почитаешь. Чего то такого, чтобы потом перечитать хотелось на эту тему у меня нет. по поводу TDD если дружны с английским, мне нравились эти видео - ruclips.net/video/F534zh9rsaA/видео.html
Работа в 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
Поддержка на первое время в Германии!
Очень дельное видео, всё по теме, без байды, структурировано, да ещё и попутно полезные фичи подсказываете. Спасибо!
Боже, Ваши уроки просто великолепны!
Онлайн-курс от 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
Спасибо за видео!
Круто! Спасибо!
я скачал dependency mongodb embedded и добавил application.properties в папке resource для тестирование, но все равно у меня запускается тот который на production-е, не понимаю из за чего
Спасибо за Ваши видео уроки. Я наверно делаю что-то не так, но у меня в тесте почему-то идет запрос (localhost) к уже существующей БД, а не тестовой. Если сервер отключаю, то выскакивает ошибка. Соответственно, этот тест не проходит. Надо попробовать скачать Ваш поимер с github и посмотреть.
А интеграционные тесты сами должны поднимать приложение или их запускают поверх работающего приложения?
Я делал тесты вызова метода как в начале видео. Но у меня при вызове метода он начинает проваливаться дальше и там уже натыкается на объекты и выкидывает NPE. Как сделать так, чтобы при вызове методов тестируемого метода он не вызывал методы которые находятся дальше внутри методов тестируемого?
Например я делаю when(stackoverflowService.findall()).thenReturn(SomeObject) Он проваливается внутрь метода findall и падает. Хочу чтобы не уходил далеко
Привет. А не подскажите как restTemplate.exchange использовать с параматезированным урлом ?
Ну как то так, и не понятно чего это такое)
I/O error on GET request for "localhost:8080/api/stackoverflow": В соединении отказано (Connection refused); nested exception is java.net.ConnectException: В соединении отказано (Connection refused)
я указал порт в тестовых application.properties, и заработало
тоже было такое, не знаю причину - просто рестартил приложение и потом снова запускал тест и все ОК.
SpringApplicationConfiguration is deprecated and WebIntegrationTest, too :(
Ага, вот она жизнь: не успеешь про что-то рассказать, а оно уже устарело :-D
В данных случаях смотрите на описание аннотаций. Вместо @SpringApplicationConfiguration начиная с версии Spring Boot 1.4 нужно использовать @SpringBootTest. А @WebIntegrationTest получается больше не нужна, достаточно иметь только @SpringBootTest
Спасибо за уточнение а можете подсказать еще. Вот вы говорите нужно использовать @SpringBootTest. А откуда вам это извесно? Я так понял из какойто таинственной документации? А где ее можно достать и как находить такие записи типо "Ей ребята мы спринг обновили теперь вместо тогото используйте то то а то вобще ненужно" поделитесь опытом плиз. Вы ведь не вечно будете ролики снимать... а я вечно буду програмировать)))
Хорошее видео
Просьба выложить исходники на гитхаб.
ловите github.com/esurovtsev/SpringDemo но там все до кучи с другими уроками по Spring
Спасибо за видео. Вы делаете юнит тест на метод getListOfProviders, вроде все понятно, по аналогии сделал тесты на все свои методы, но нужно написать тест проверяющий колличество вызовов метода и не очень понимаю как это делается. Вроде понятно, что вызываешь метод несколько раз и потом подсчитываешь их, но на деле ни чего не выходит.
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()
У меня часть тестов проходят, а один нет. Мне кажется я не очень понимаю что нужно вызывать.
У меня есть:
@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? Но тогда вроде я не поверяю методы контроллера, а проверяю методы интерфейса.
Круто, но насколько я знаю, интеграционные тесты со спрингом проходят в рамках транзакций, и после каждого метода не нужно удалять данные с базы данных.
Спасибо!
Вопрос- почему у меня не заработала 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
Без Intellij Idea, если просто запускаете "mvn clean install" работает?
С 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)}
Есть соображения по этому поводу?
Из описания ошибки следует, что Spring не создал bean от класса MongoTemplate. Spring должен создавать данный бин сам, если зависимости на монго определены (если конкретно, то MongoDataAutoConfiguration отвечает за это). Почему это не сработало в тестовой конфигурации у вас, мне сложно сказать, что-то не так наверное в настройках (=Spring аннотациях) на классе StackoverflowControllerIT
Нужно установить плагин и настроить поддержку аннотаций.
Устанавливаем плагин: Settings -> Plugins -> Search in repositories -> в поиске вводим Lombok.
После установки перезагружаем IntelliJ IDEA.
Включаем обработку аннотаций Lombok: Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors.
Спасибо!
Но очень сложно если ты ни когда не писал интеграционные тесты, сильно много информации за один урок.
Подскажите какую литературу стоит почитать что бы по лучше разбираться в этом?
Спасибо за комментарий. Попробуем переснять несколькими частями и рассказать более подробно.
По поводу вопроса, Unit-тесты активно писали? попробуйте начать с них и с TDD. я бы посидел на этой связке (unit + tdd) просто какое то время, пару месяцев, полгода. Если раньше этого не делали, то у вас даже стиль программирования измениться. Мне кажется как то так, потому что необходимость интеграционных тестов понятна, когда начинаешь понимать ограниченность unit тестов. Соответственно приходит понимание в чем различие, зачем они нужны, и как их делать :-)
Книг особых, "изменивших мою жизнь раз и навсегда" не посоветую, так в процессе тут посмотришь, там почитаешь. Чего то такого, чтобы потом перечитать хотелось на эту тему у меня нет. по поводу TDD если дружны с английским, мне нравились эти видео - ruclips.net/video/F534zh9rsaA/видео.html