Closed TemirlanSadykov closed 4 years ago
После изученных материалов из различных источников и проведенных тестов были сделаны следующие выводы:
@MockBean
UserRepo userRepo;
При указании аннотации @MockBean для UserRepo необходимо указать какой метод вызывается и какой получается результат. Т.е. перед вызовом userRepo.save() (который автоматически вызовется при UserService.createUser()), необходимо указать что мы получим в результате.
Например:
when(placeRepo.save(user).thenReturn(что-либо);
В таком случае мы не можем протестировать, что именно вернет UserService.createUser() -> userRepo.save(user) так как при использовании mock мы сами укажем что именно надо вернуть
Изученные ссылки: http://crm.attractor-school.com/uploads/item/pdf/1822/02___Модульное_тестирование.pdf https://www.springboottutorial.com/spring-boot-unit-testing-and-mocking-with-mockito-and-junit https://www.baeldung.com/spring-boot-testing https://www.vogella.com/tutorials/Mockito/article.html https://www.baeldung.com/injecting-mocks-in-spring https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/testing.html https://habr.com/ru/post/169381/
Так как процесс создания тестов еще не завершен, прошу перенести тикет на следующий спринт. Фактическое время на данный момент: 13 часов. Причина: Искал правильный подход к выполнению поставленной задачи, затрачено время на тестирование и изучение подхода через Mock, использование которого не подходит к данной задаче по указанной выше причине.
Прошу перенести тикет на следующий спринт.
Причина: Еще не закончил. Имеются ошибки.
Основываясь на полученный опыт при работе над тикетом №73 переделал метод UserServiceTest на
UserServiceTest.zip необходимо еще проверить точно ли срабатывает валидация при попытке сохранения неверных данных.
Также столкнулся с ошибкой Unexpected exception type thrown ==> expected: <javax.xml.bind.ValidationException> but was: <java.lang.NullPointerException>
Не могу запушить пока проблема не будет решена.
Фактически потраченое время: 3 часа
Один из вариантов решения ошибки NullPointerException, когда НЕ используется mock - https://www.eviltester.com/2017/08/faq-null-pointer-exception.html
https://www.youtube.com/watch?v=Vqa_A2uuZPE&feature=emb_logo - Здесь также рассказывается о правильном подходе написания тестов:
Сначала пишется работоспособный @Test, потом уже выносятся общие переменные в @Before и т.д.
Решение ошибки NullPointerException, указанная в комментарии решилась тем, что при импортировании аннотации @Test
указывалось import org.junit.Test;
, а должно было import org.junit.jupiter.api.Test;
при import org.junit.Test
@Autowired UserService
не создается этот объект и получается userServise = null
Он и вызывает ошибку
Успешный тест на @SpringBootTest сохранял в БД, поэтому искал подход без сохранения. https://www.freecodecamp.org/news/unit-testing-services-endpoints-and-repositories-in-spring-boot-4b7d9dc2b772/
В ходе изучения столкнулся с ошибками. Далее будут описаны в коммитах.
Изучение окончено. Создал корректный вариант теста сервиса UserService. Фактически потраченное время на изучение и создание правильного тестового метода через @Mock во время Sprint 6 - 8 часов
Итоговое фактически потраченное время Sprint 6: 9 часов (1 час создания коммитов и 8 часов изучение и создание)
После обсуждений с аналитиком решили добавить Assertions
Что нужно сделать? Изучить и пересоздать тесты для валидации для сервиса UserService для всех методов.
Для чего это нужно? Нужно для проверки верности работы методов сервиса UserService, т.к. в прошлый раз мы не до конца изучили весь функционал тестов.
Как понять, что задача решена? Получить тест, для валидации для сервиса UserService.
Планируемое время 7 часов