Пікірлер
@wilsonikner1167
@wilsonikner1167 Күн бұрын
Я один, наверное, тут тупой) У меня не получается тестировать без предварительной сборки проекта. Если же я предварительно его собираю, то есть появляется папка 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
@НикаСтроганова
@НикаСтроганова Күн бұрын
Гениальное видео!!!
@RomanKoshetov
@RomanKoshetov 8 күн бұрын
Очень классные объяснения, красавчик мужик)
@RasimAlimgukov
@RasimAlimgukov 15 күн бұрын
Сложновато
@_Z.a.h.a.R_
@_Z.a.h.a.R_ 17 күн бұрын
Круто спсибо
@hypad1106
@hypad1106 28 күн бұрын
очень крутые видео, все просто и понятно, спасибо)
@vasyapypkin8899
@vasyapypkin8899 Ай бұрын
хорошо объясняешь, только надо помедленнее, твои быстрые переключения между вкладками могут приступ эпилепсии вызвать)
@RasimAlimgukov
@RasimAlimgukov Ай бұрын
Спасибо, всё быстро и понятно
@AP-jq2lv
@AP-jq2lv Ай бұрын
спасибо, отличное видео. Без воды, на адекватных, понятных любому, примерах 🤘🏻
@goro5823
@goro5823 Ай бұрын
1:19 в setUp можно еще кастомное исключения прокидывать, но если я буду кидать обычный Exception, это плохая практика или нет? .setControllerAdvice(new Exception("Exception")).build;
@JIockjoy
@JIockjoy Ай бұрын
MockitoAnnotations.openMocks(this);
@themukha
@themukha Ай бұрын
Я уже больше 3 лет занимаюсь автоматизацией тестирования бэкенда и только узнал о методе asserThrows🤣 Мдэ, позор мне
@whitelight8811
@whitelight8811 Ай бұрын
Смотреть всем
@eosreign818
@eosreign818 Ай бұрын
Довольно хороший контент делаешь, всегда пересматриваю твои ролики если забыл как использовать те или иные технологиию. Пожалуйста, продолжай снимать еще учебные ролики
@666kirillka
@666kirillka 2 ай бұрын
Жаль,забросили выпуск видео,понятная подача
@asgzxbaasg9766
@asgzxbaasg9766 2 ай бұрын
красавчик, может когда-нибудь напишу свой первый полезный тест
@lesechko
@lesechko 2 ай бұрын
Присоединюсь к комментариям. Как раз то, что нужно. Задал конкретный вопрос - получил конкретный ответ без воды и лишней мишуры с хорошей речью и темпом. По этому поиску только 2 видео в подобном формате. Остальные на 30 минут что-то рассказывают. Спасибо и успехов!
@user-ef2mm2ux2h
@user-ef2mm2ux2h 2 ай бұрын
Хочется новых роликов, очень круто и понятно объясняется, очень легко зайти и вспомнить некоторые моменты) Хотелось бы что нибудь про spring security
@user-wb7zt3cc5i
@user-wb7zt3cc5i 2 ай бұрын
Сразу все стало понятно. Спасибо!
@turpalbaysarov4354
@turpalbaysarov4354 2 ай бұрын
Насколько чётко, быстро и понятно объясняешь. От души <3
@raccoon8230
@raccoon8230 3 ай бұрын
Спасибо
@John.Constantine.777
@John.Constantine.777 3 ай бұрын
почему у меня при загрузке проекта из хаба в IDEA системных директории не помечены, импорты не грузятся, ничего не работает?
@javistt
@javistt 3 ай бұрын
Без понятия
@sovietunionmissionary
@sovietunionmissionary 3 ай бұрын
Главное не объявлять внутри сервиса финальным то, что будем потом внедрять туда как мок. По крайней мере у меня так, не работала аннотация InjectMocks пока не убрал final.
@user-ug2es7lr8t
@user-ug2es7lr8t 3 ай бұрын
Обычно ютуб смотрю х2, у тут хочется замедлить )
@AdventureDeveloper
@AdventureDeveloper 3 ай бұрын
Очень классная подача материала, спасибо!
@whatyoumean1498
@whatyoumean1498 3 ай бұрын
Есть желание поддержать) Очень хорошее видео. Экстремально рекомендую к просмотру.
@user-hv2ih5tn9e
@user-hv2ih5tn9e 3 ай бұрын
Не удержался от комментария - супер полезно, супер доходчиво, супер ёмко - респект!
@9080artur
@9080artur 3 ай бұрын
по кайфу
@dreamer_vi905
@dreamer_vi905 3 ай бұрын
500 денег этому автору))
@vladimiregorov6187
@vladimiregorov6187 4 ай бұрын
Отличный видос, коротко и понятно, спасибо большое!👍
@user-lh9vc1kb6q
@user-lh9vc1kb6q 4 ай бұрын
Огромная вам благодарность за то что так доходчиво обьясняете!
@selftishz3151
@selftishz3151 4 ай бұрын
Отличная подача: речь - супер топ
@EdwardNorthwind
@EdwardNorthwind 4 ай бұрын
Классно, что не остановился на калькуляторе. Хотя стоило больше внимания уделить, а зачем тестировать вроде бы очевидные и простые методы... А то именно по этой причине я и забиваю на тесты. Ну тут же всё очевидно, так зачем тратить на это время 🤬Тяжело избавится от этой привычки пока не начнешь работать в команде.
@EdwardNorthwind
@EdwardNorthwind 4 ай бұрын
После нашел следующие ролики про тестирование. Так что претензия снята. Так что, народ, если видели лишь данное видео, обязательно посмотрите и другие.
@andreyua2
@andreyua2 4 ай бұрын
А как кеишровать, скажем - через каждых 5 минут автоматически ?
@javistt
@javistt 4 ай бұрын
Подробнее опишите задачу
@andreyua2
@andreyua2 4 ай бұрын
@@javistt Это часть тех. задания: _Разработать Spring Boot RESTful API, который будет обновлять данные в БД и кэшировать ответы через определенные промежутки времени (например, каждые 5 минут)._ Понимайте как хотите)
@andreyua2
@andreyua2 4 ай бұрын
@@javistt так что не будет ответа?
@artemy99
@artemy99 2 ай бұрын
@@andreyua2 ну очевидно что (обновлять данные в БД и кэшировать ответы) каждые 5 минут, а не только заниматься кэшом каждые 5 минут
@John.Constantine.777
@John.Constantine.777 4 ай бұрын
теперь понял хоть что такое тесты и почему говорят про свалку мусора вместо тестов у многих разработчиков - двойная работа, которую делаешь хорошо - платят и делаешь на отвали - тоже так же платят. сдается мне реальные тесты пишут только для части кода, который обязательно нужно проверять во избежание крупных материальных потерь заказчика, а остальные либо не пишут либо пишут на отвали
@John.Constantine.777
@John.Constantine.777 4 ай бұрын
как минимум интересно
@user-hm8wx2us8l
@user-hm8wx2us8l 4 ай бұрын
блин, супер крутой формат, конечно) реально за 4 минуты -> самый необходимый минимум для начала работы, круто)
@tarielasangulov1273
@tarielasangulov1273 4 ай бұрын
Офигенно!
@tarielasangulov1273
@tarielasangulov1273 4 ай бұрын
Благодарю за полезную информацию!
@sergeysirmays6010
@sergeysirmays6010 4 ай бұрын
Самый короткий и понятный мануал! Я до этого часа 4 просмотрел всего и не мог до конца понять. Спасибо!
@dmitriyaverianov1843
@dmitriyaverianov1843 4 ай бұрын
ещё больше белого, чтобы сломать глаза
@user-lh9vc1kb6q
@user-lh9vc1kb6q 5 ай бұрын
Спасибо огромное за ролики по тестированию сервиса и контроллера. Очень наглядно и понятно!
@user-wk7kd4ky6g
@user-wk7kd4ky6g 5 ай бұрын
Вы спасли мой день, спасибо!
@igormartynenko9648
@igormartynenko9648 5 ай бұрын
Очень крутая подача! Буду рад посмотреть что то подобное про GC и их поколения.
@romankakraz8199
@romankakraz8199 5 ай бұрын
Это прекрасно!
@KAPYRIN
@KAPYRIN 5 ай бұрын
Спасибо большое за видео, но от светлой темы у меня выпали глаза.
@channel-yg2xc
@channel-yg2xc 5 ай бұрын
Видео хорошее, но паттерн, который ты показываешь, называется strategy. Command - это когда у тебя есть шаблонная логика в рамках некоторого класса, и метод вызова этой логики принимает в качестве аргумента command-класс, обобщенный некоторой абстракцией(интерфейс, базовый класс), содержащий метод, который вызывается в классе с шаблонной логикой. И, как по мне, смысла от command в рамках java + Spring приложении нет, если есть возможность использовать template method. А возможность есть всегда :)
@John.Constantine.777
@John.Constantine.777 4 ай бұрын
Сдается мне, что паттерн команда - это поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать (вести журнал запросов) их, а также поддерживать отмену операций. Главное в нем это инкапсуляция методов в объекты, их хранение и возможность отмены. А этот паттерн называется не Стратегия, а Состояние, потому как объект, определяющий поведение основного класса содержится в полях этого класса
@channel-yg2xc
@channel-yg2xc 4 ай бұрын
@@John.Constantine.777 , это если следовать строгому определению. Вопрос скорее в том, может ли Command быть без т.н. операции undo, и обязательно ли она должна содержать состояние. Проще говоря, если вместо класса, имплементитующего некоторый общий интерфейс(ICommand), передавать в метод простой Runnable, в котором через замыкание будет прописана логика, скажем, отправки события в шину сообщений, можно ли это считать Командой? Более того, следовать классическому примеру реализации шаблона Command, на мой взгляд, возможно не всегда: в случае, когда команда отправляет событие в шину сообщений(условный RabbitMQ), применить операцию undo возможности нет. На мой взгляд, в большинстве случаев Command как раз стоит использовать в виде функциональных интерфейсов(анонимных классов), не имющих состояние, а если состояние всё же есть, и команда предполагает нетривиальную и объёмную логику - я бы подумал о Template Method или в некоторых специфических кейсах Bridge, т.к. в случае дальнейшего развития фичи эта команда вряд ли влезет в один метод. Что касается Strategy и State, мне кажется, что пример на видео - это классическая Strategy с использованием механизма dependency injection. Здесь основной момент в том, что у нас есть общий интерфейс для компонентов, предполагающих разное поведение(классический полиморфизм), а "состояние" у нас, во-первых, статическое, неизменяемое, что уже, как мне кажется, противоречит шаблону State, а во-вторых, оно нужно только для того, чтобы положить компонент в ассоциативный массив: мы вполне могли бы обойтись без "инкапсуляции" т.н. "состояния" внутри компонента, положив в хеш-таблицу значения явно указывая компоненты, а не через stream api. Правда, тогда пришлось бы инжектить каждый бин отдельно.
@KotlinBack
@KotlinBack 8 күн бұрын
Даже больше на медиатор похож
@JanSobolewski1987
@JanSobolewski1987 5 ай бұрын
Коротко и ясно рассказал. Like
@baimuhtar8186
@baimuhtar8186 5 ай бұрын
Здравствуйте, подскажите как сейчас проводят автотест на Java c Selenium для входа в аккаунт Google?
@javistt
@javistt 5 ай бұрын
Приветствую. chat.openai.com/share/24f890c2-dd12-4862-9a49-35cb0e6c2114
@baimuhtar8186
@baimuhtar8186 5 ай бұрын
@@javistt Но выходит ведь окно, что «этот браузер или приложение небезопасны». И дальше не получается пройти авторизацию.
@olyarashchupkina1656
@olyarashchupkina1656 5 ай бұрын
Перечитала кучу статей и только из этого короткого видео узнала в чем ошибка…. Что нельзя вызывать транзакцию из того же класса. Еще хотелось бы узнать, почему именно нельзя. Но понятно, что это тема не этого короткого ролика. Спасибо большое!