Бро, нереальный респект и огромное человеческое спасибо! Надеюсь ты будешь развивать эту тему, по тестированию на 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. Успехов тебе!
Спасибо за видео! Ждём видео по тестированию репы)
Подача замечательная, благодарю! Вы лучший! Буду смотреть ваши уроки, спасибо большое!!!
С возвращением )) Спасибо за виде
Где же ты был раньше; это просто прекрасно
Понятное изложение. Спасибо за рассказ! Ждем продолжения )
Ух ты, вот это открытие. Джавист, в твоей команде подписчиков пополнение. Уверен, с такой подачей количество подписчиков будет не 3.78, а 378 тыс.
Огромное спасибо!
Ждем продолжения по тестированию и @Transactional
Круто! Давно ждал твои видео, сними пожалуйста что нибудь про 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 плагины, и только после сборки "вручную" тестирование работало