Бро, нереальный респект и огромное человеческое спасибо! Надеюсь ты будешь развивать эту тему, по тестированию на Java в русскоязычном сегменте очень мало видосов
перерыл кучу сайтов в поисках объяснения JUnit, везде куча воды и непонятных встулений. Тут все четко, кратко и по делу, спасибо чувак, пойду к тебе на канал, уверен там куча видео в таком стиле)
Спасибо! очень в тему! Хорошее изложение, без воды, то что нужно! Очень хочется продолжения с тестированием REST`а с MockMvc и RestAssuredMockMvc и тестированием REST`а с поднятым секьюрити ))
Отличное видео. Для меня, новичка в тестах теперь понятно хотя бы как начать писать простые контроллер тесты, а там уж с практикой можно разобраться с остальным.
Офигенный блогер. Одна претензия есть - почему так часто пропадаешь? Реально пили больше видео, может лайфкоддинг? Реально крутая подача, сжато и информативно
Стоит ли каждый метод сервиса тестировать в отдельном классе или это излишество ? Просто хотелось бы структурировать тесты, типа каждый метод тестируется отдельно, а не в куче со всеми... Или так нельзя делать ?
Классно, что не остановился на калькуляторе. Хотя стоило больше внимания уделить, а зачем тестировать вроде бы очевидные и простые методы... А то именно по этой причине я и забиваю на тесты. Ну тут же всё очевидно, так зачем тратить на это время 🤬Тяжело избавится от этой привычки пока не начнешь работать в команде.
После нашел следующие ролики про тестирование. Так что претензия снята. Так что, народ, если видели лишь данное видео, обязательно посмотрите и другие.
Привет! спасибо за видео, полезно У меня вопрос, буду благодарен, если получу ответ Если например в сервисом слое используется маппер, типо мэпстракт, и нужно протестить сервис, нужно мотать и менять поведение этого маппера, или не макать его и добавить "оригинальный объект"
Привет, если логика маппинга не сложна и не включает вызовы к другим сервисам или ресурсам, то мокать её не нужно. Мапперы обычно не имеют сторонних зависимостей, и их можно использовать напрямую в тестах. Тем более что маппинг - это часть логики, которую тоже нужно проверять.
теперь понял хоть что такое тесты и почему говорят про свалку мусора вместо тестов у многих разработчиков - двойная работа, которую делаешь хорошо - платят и делаешь на отвали - тоже так же платят. сдается мне реальные тесты пишут только для части кода, который обязательно нужно проверять во избежание крупных материальных потерь заказчика, а остальные либо не пишут либо пишут на отвали
Главное не объявлять внутри сервиса финальным то, что будем потом внедрять туда как мок. По крайней мере у меня так, не работала аннотация InjectMocks пока не убрал final.
Я один, наверное, тут тупой) У меня не получается тестировать без предварительной сборки проекта. Если же я предварительно его собираю, то есть появляется папка target, то тестирует , НО, при изменении класса Calculator необходимо снова пересобрать проект. Я так понимаю, у меня тестируется класс в папке target, почему? вроде бы сделал как на видео. Я меня нет Application класса только, но автор ничего о нем не говорит. я конечно могу открыть свои СпрингБутовские проекты, и там сделать , но мне интересно как тестировать в разных случаях, с разными фреймворками и конфигурациями. Итак, при запуске тестирования метода sum() Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:160) at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverSafely(EngineDiscoveryOrchestrator.java:132) at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:107) at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:78) at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:99) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85) at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:63) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) Caused by: org.junit.platform.commons.JUnitException: ClassSelector [className = 'com.Testing.utils.CalculatorTest', classLoader = null] resolution failed at org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener.selectorProcessed(AbortOnFailureLauncherDiscoveryListener.java:39) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:103) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:83) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113) at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:46) at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69) at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:152) ... 13 more Caused by: org.junit.platform.commons.PreconditionViolationException: Could not load class with name: com.Testing.utils.CalculatorTest at org.junit.platform.engine.discovery.ClassSelector.lambda$getJavaClass$0(ClassSelector.java:95) at org.junit.platform.commons.function.Try$Failure.getOrThrow(Try.java:335) at org.junit.platform.engine.discovery.ClassSelector.getJavaClass(ClassSelector.java:94) at org.junit.jupiter.engine.discovery.ClassSelectorResolver.resolve(ClassSelectorResolver.java:66) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:135) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1685) at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129) at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:189) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:126) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:92) ... 18 more Caused by: java.lang.ClassNotFoundException: com.Testing.utils.CalculatorTest at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:534) at java.base/java.lang.Class.forName(Class.java:513) at org.junit.platform.commons.util.ReflectionUtils.lambda$tryToLoadClass$9(ReflectionUtils.java:832) at org.junit.platform.commons.function.Try.lambda$call$0(Try.java:57) at org.junit.platform.commons.function.Try.of(Try.java:93) at org.junit.platform.commons.function.Try.call(Try.java:57) at org.junit.platform.commons.util.ReflectionUtils.tryToLoadClass(ReflectionUtils.java:795) at org.junit.platform.commons.util.ReflectionUtils.tryToLoadClass(ReflectionUtils.java:751) at org.junit.platform.engine.discovery.ClassSelector.getJavaClass(ClassSelector.java:92) ... 32 more Process finished with exit code -2
Заработало. Честно говоря, не знаю, что именно вызывало это ошибку.поигрался с версиями java в настройках проекта и с maven archetype , все заработало. Что то было с плагинами в pom.xml, я так понимаю, не билдился проект при запуске тестирования, да и psvm() не билдился, билдился только через встроенные в Idea Maven плагины, и только после сборки "вручную" тестирование работало
Бро, нереальный респект и огромное человеческое спасибо! Надеюсь ты будешь развивать эту тему, по тестированию на Java в русскоязычном сегменте очень мало видосов
Самый короткий и понятный мануал! Я до этого часа 4 просмотрел всего и не мог до конца понять. Спасибо!
Кратко, емко, отличная подача материала.
Дикция, голос - супер.
Классные уроки.
С нетерпение жду новых видео!
перерыл кучу сайтов в поисках объяснения JUnit, везде куча воды и непонятных встулений. Тут все четко, кратко и по делу, спасибо чувак, пойду к тебе на канал, уверен там куча видео в таком стиле)
Спасибо! очень в тему! Хорошее изложение, без воды, то что нужно!
Очень хочется продолжения с тестированием REST`а с MockMvc и RestAssuredMockMvc и тестированием REST`а с поднятым секьюрити ))
Отличное видео. Для меня, новичка в тестах теперь понятно хотя бы как начать писать простые контроллер тесты, а там уж с практикой можно разобраться с остальным.
Огромная вам благодарность за то что так доходчиво обьясняете!
Молодец. Емко, коротко. И про нейминг тест класов не забыл!!! Многие это упускают.
Единственное видео, после которого действительное пришло понимание основ тестирования на Java. Спасибо!
Офигенный блогер. Одна претензия есть - почему так часто пропадаешь? Реально пили больше видео, может лайфкоддинг? Реально крутая подача, сжато и информативно
Благодарю. Пропадаю, потому что на производство видео уходит много времени и не всегда получается его выделить.
Подача замечательная, благодарю! Вы лучший! Буду смотреть ваши уроки, спасибо большое!!!
Понятное изложение. Спасибо за рассказ! Ждем продолжения )
спасибо, отличное видео. Без воды, на адекватных, понятных любому, примерах 🤘🏻
Очень хорошо объясняешь, спасибо за хороший и понятный урок. Продолжай пожалуйста выпускать видео по программированию на Java. Успехов тебе!
НЕВЕРОЯТНО понятное объяснение, респект!!
Прекрасное объяснение, человек явно понимает о чём говорит, спасибо
Огромное спасибо!
Ждем продолжения по тестированию и @Transactional
Где же ты был раньше; это просто прекрасно
Спасибо за видео! Ждём видео по тестированию репы)
Ух ты, вот это открытие. Джавист, в твоей команде подписчиков пополнение. Уверен, с такой подачей количество подписчиков будет не 3.78, а 378 тыс.
Вот прям по круто обьяснил, без ненужных сравнений, БРАВООО!
С возвращением )) Спасибо за виде
Очень классные объяснения, красавчик мужик)
Круто! Давно ждал твои видео, сними пожалуйста что нибудь про spock framework
Ура, новый видос! Спасибо за видео!
Отличная подача: речь - супер топ
Божественное видео! Спасибо
Емко и по делу и главное прям то, что я искал)
Огромное спасибо, как всегда всё коротко, чётко, и по полочкам. Обожаю твои видео! Сними пожалуйста ролик по Spring Security
оч круто!! ждем еще спасибо
Очень классная подача материала, спасибо!
Спасибо за урок)), жду следуещий, на контроллера и репозитории!
спасибо за видео! жду видео про тестирование репозиториев и контроллеров
Очень жду видео, тестирование Controller и Repository)
отличный материал, спасибо!)
Снимай пожалуйста больше!!!!
Коротко и ясно рассказал. Like
Спасибо большое! Очень ясно и доходчиво! Подписался
Отоичное видео, спасибо!
Хороший видос, спасибо😊
Спасибо большое за такое понятное объяснение! Насколько я понял, создание класса для исключения TooLowSalaryException было опущено для краткости?
Всё, увидел в исходном коде)
подписка однозначно!
Это видео спасло мой дедлайн
Стоит ли каждый метод сервиса тестировать в отдельном классе или это излишество ? Просто хотелось бы структурировать тесты, типа каждый метод тестируется отдельно, а не в куче со всеми... Или так нельзя делать ?
@@m0naco608 Начать можно с тест класса для всего класса, а не отдельного метода.
Классно, что не остановился на калькуляторе. Хотя стоило больше внимания уделить, а зачем тестировать вроде бы очевидные и простые методы... А то именно по этой причине я и забиваю на тесты. Ну тут же всё очевидно, так зачем тратить на это время 🤬Тяжело избавится от этой привычки пока не начнешь работать в команде.
После нашел следующие ролики про тестирование. Так что претензия снята. Так что, народ, если видели лишь данное видео, обязательно посмотрите и другие.
Лучший!
Спасибо
Давай про тестконтейнеры)
Приятный голос
Спсшки!!!
Привет!
спасибо за видео, полезно
У меня вопрос, буду благодарен, если получу ответ
Если например в сервисом слое используется маппер, типо мэпстракт, и нужно протестить сервис, нужно мотать и менять поведение этого маппера, или не макать его и добавить "оригинальный объект"
Привет, если логика маппинга не сложна и не включает вызовы к другим сервисам или ресурсам, то мокать её не нужно. Мапперы обычно не имеют сторонних зависимостей, и их можно использовать напрямую в тестах. Тем более что маппинг - это часть логики, которую тоже нужно проверять.
@@javistt супер, спасибо
Здравствуйте, подскажите как сейчас проводят автотест на Java c Selenium для входа в аккаунт Google?
Приветствую.
chat.openai.com/share/24f890c2-dd12-4862-9a49-35cb0e6c2114
@@javistt Но выходит ведь окно, что «этот браузер или приложение небезопасны». И дальше не получается пройти авторизацию.
ещё больше белого, чтобы сломать глаза
Почему так мало лайков. Посчитайте мой за 5, пожалуйста
Я уже больше 3 лет занимаюсь автоматизацией тестирования бэкенда и только узнал о методе asserThrows🤣
Мдэ, позор мне
А другой раз когда настанет?
Хороший вопрос
теперь понял хоть что такое тесты и почему говорят про свалку мусора вместо тестов у многих разработчиков - двойная работа, которую делаешь хорошо - платят и делаешь на отвали - тоже так же платят.
сдается мне реальные тесты пишут только для части кода, который обязательно нужно проверять во избежание крупных материальных потерь заказчика, а остальные либо не пишут либо пишут на отвали
Только у меня с 5 мин видео замыливается?
Проверил, вроде всё в порядке.
на 0,75 скорости голос такой гы
Главное не объявлять внутри сервиса финальным то, что будем потом внедрять туда как мок. По крайней мере у меня так, не работала аннотация InjectMocks пока не убрал final.
Я один, наверное, тут тупой) У меня не получается тестировать без предварительной сборки проекта. Если же я предварительно его собираю, то есть появляется папка target, то тестирует , НО, при изменении класса Calculator необходимо снова пересобрать проект. Я так понимаю, у меня тестируется класс в папке target, почему? вроде бы сделал как на видео. Я меня нет Application класса только, но автор ничего о нем не говорит. я конечно могу открыть свои СпрингБутовские проекты, и там сделать , но мне интересно как тестировать в разных случаях, с разными фреймворками и конфигурациями. Итак, при запуске тестирования метода sum()
Internal Error occurred.
org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests
at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:160)
at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverSafely(EngineDiscoveryOrchestrator.java:132)
at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:107)
at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:78)
at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:99)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:63)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
Caused by: org.junit.platform.commons.JUnitException: ClassSelector [className = 'com.Testing.utils.CalculatorTest', classLoader = null] resolution failed
at org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener.selectorProcessed(AbortOnFailureLauncherDiscoveryListener.java:39)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:103)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:83)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113)
at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:46)
at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69)
at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:152)
... 13 more
Caused by: org.junit.platform.commons.PreconditionViolationException: Could not load class with name: com.Testing.utils.CalculatorTest
at org.junit.platform.engine.discovery.ClassSelector.lambda$getJavaClass$0(ClassSelector.java:95)
at org.junit.platform.commons.function.Try$Failure.getOrThrow(Try.java:335)
at org.junit.platform.engine.discovery.ClassSelector.getJavaClass(ClassSelector.java:94)
at org.junit.jupiter.engine.discovery.ClassSelectorResolver.resolve(ClassSelectorResolver.java:66)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:135)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1685)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:189)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:126)
at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:92)
... 18 more
Caused by: java.lang.ClassNotFoundException: com.Testing.utils.CalculatorTest
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:534)
at java.base/java.lang.Class.forName(Class.java:513)
at org.junit.platform.commons.util.ReflectionUtils.lambda$tryToLoadClass$9(ReflectionUtils.java:832)
at org.junit.platform.commons.function.Try.lambda$call$0(Try.java:57)
at org.junit.platform.commons.function.Try.of(Try.java:93)
at org.junit.platform.commons.function.Try.call(Try.java:57)
at org.junit.platform.commons.util.ReflectionUtils.tryToLoadClass(ReflectionUtils.java:795)
at org.junit.platform.commons.util.ReflectionUtils.tryToLoadClass(ReflectionUtils.java:751)
at org.junit.platform.engine.discovery.ClassSelector.getJavaClass(ClassSelector.java:92)
... 32 more
Process finished with exit code -2
Заработало. Честно говоря, не знаю, что именно вызывало это ошибку.поигрался с версиями java в настройках проекта и с maven archetype , все заработало. Что то было с плагинами в pom.xml, я так понимаю, не билдился проект при запуске тестирования, да и psvm() не билдился, билдился только через встроенные в Idea Maven плагины, и только после сборки "вручную" тестирование работало