SpringBoot @MockBean и @WebMvcTest не работает
Выше конфигурация работает нормально, но ниже нет.
и я получаю эту ошибку
Приложение не удалось запустить
Компонент требует bean-компонент с именем entityManagerFactory, который не может быть найден.
Попробуйте определить bean-компонент с именем entityManagerFactory в своей конфигурации.
2018-11-26 21: 58: 32.343 ОШИБКА 7385 — [main] ostest.context.TestContextManager: возникло исключение при разрешении TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@5c7bfdc1] для подготовки экземпляра [com.webservices.example.librarydatabaseservice.controller.ControllerTest@74f827ad]
java.lang.IllegalStateException: не удалось загрузить ApplicationContext по адресу org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
[spring -ELE 5.1A ] at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:99)
[spring-boot-test-2.1.0.RELEASE.jar: 2.1.0.RELEASE] в org.springframework.boot.test.mock.mockito. MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:79)
[spring-boot-test-2.1.0.RELEASE.jar: 2.1.0..java: 54)
[spring-boot-test-2.1.0.RELEASE.jar: 2.1.0.RELEASE] в org.springframework.test.context.T estContextManager.prepareTestInstance(TestContextManager.java:246)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] по адресу org.springframework.test.context.junit4.SpringJUnit4ClassRunner.jit )
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.test.context.junit4.SpringJUnit4ClassRunner $ 1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] на org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
[junit-4.12.jar: 4.12] на org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.test.context.junitnit.Junit4.rSpring SpringJUnit4ClassRunner.java:246)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4Class:97) -test-5.1.2.REL EASE.jar: 5.1.2.RELEASE] в org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290)
[junit-4.12.jar: 4.12] в org.junit.runners.ParentRunner $ 1.schedule( ParentRunner.java:71)
[junit-4.12.jar: 4.12] в org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
[junit-4.12.jar: 4.12] в org.junit.runners. ParentRunner.access $ 000 (ParentRunner.java:58)
[junit-4.12.jar: 4.12] в org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:268)
[junit-4.12.jar: 4.12] в org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.test.test.test.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.junit.runners.ParentRunner.run(ParentRunner.java: 363)
[junit-4.12.jar: 4.12] по адресу org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner. java: 190)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.junit.runner.JUnitCore.run(JUnitCore.java:137)
[junit-4.12.jar: 4.12 ] at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
[junit-rt.jar: na] в com.intellij.rt.execution.junit.IdeaTestRunnerRunnerRunner )
[junit-rt.jar: na] в com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
[junit-rt.jar: na] в com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
[junit-rt.jar: na] Причина: org.springframework.beans.factory.BeanCreationException: Ошибка при создании компонента с именем bookRepository: не удается создать внутренний компонент (внутренний бин) # 3f362135 ‘типа [org.springframework.orm.jpa.SharedEntityManagerCreator] при установке свойства бина’ entityManager ‘; вложенное исключение — org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем ‘(внутренний компонент) # 3f362135’: невозможно разрешить ссылку на компонент ‘entityManagerFactory’ при установке аргумента конструктора; Вложенное исключение — org.springframework.beans.factory.NoSuchBeanDefinitionException: ни один компонент с именем entityManagerFactory не доступен в org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean..RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNeeded(BeanDefinitionValueResolver.java:131)
[spring-beans-5.1.2j.RELE RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1648)
[spring-beans-5.1.2.RELEASE.jar: 5.1.bef. factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1400)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.sringing, java: 575)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java: Spring): spring: -5.1.2.RELEASE.jar: 5.1.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory.java:320)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory. support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.DefaultListableBeanFactory.preonsstanFisoryBable(DefaultSignableFistableBable) ctory.java:827)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863)
[spring-context -5.1.2.RELEASE.jar: 5.1.2.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
[spring-context-5.1.2.RELEASE.jar: 5.1. 2.RELEASE] в org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
[spring-boot-2.1.0.RELEASE.jar: 2.1.0.RELEASE] в org.springframework.boot.SpringApplication. refreshContext (SpringApplication.java:397)
[spring-boot-2.1.0.RELEASE.jar: 2.1.0.RELEASE] в org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
[spring-boot -2.1.0.RELEASE.jar: 2.1.0.RELEASE] at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:127)
[spring-boot-test-2.1.0.RELEASE. jar: 2.1.0.RELEASE] at org.springframework.test.context.c ache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.test.context.cacheDextConteaderLateConteaderLateCateConteader(): 117)
[spring-test-5.1.2.RELEASE.jar: 5.1.2.RELEASE]. опущено 25 общих фреймов. Причины: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем ‘( внутренний бин) # 3f362135 ‘: невозможно разрешить ссылку на бин entityManagerFactory при установке аргумента конструктора; вложенное исключение — org.springframework.beans.factory.NoSuchBeanDefinitionException: нет объекта bean с именем entityManagerFactory, доступного в org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReferenceV BeanDefin.RELEASE.jar: 5.1.2.RELEASE] at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNeeded(BeanDefinitionValueResolver.java:110)
[spring-beans-5.1.2j.RELE RELEASE] в org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:660)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans. factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:478)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.suppan.java: 1288)
[spring- beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:112EL -java:112E-5.1.ar: 5.1.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
[spring-beans-5.1.2.RELEASE.REL] на уровне 5.1:.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASEf.rapp.pr BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:312)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE]. 43 опущенных общих фрейма Вызвано: org.springframework.beans.factoryExeBe: Exu.Su:. Нет объекта с именем entityManagerFactory, доступного по адресу org.springframework.beans.factory.support.DefaultListableBeanFactor y.getBeanDefinition(DefaultListableBeanFactory.java:772)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanJefF( )
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:294)
[spring-beans-5.1. 2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE] at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367)
[spring-beans-5.1.2.RELEASE.jar: 5.1.2.RELEASE]. 51 общие кадры опущено
Это говорит о том, что есть проблема с entityFactoryManager, но в одном фиктивном способе это работает, а в другом нет.
Я использую SpringBoot в версии: 2.1.0.RELEASE
Источник
@MockBean не работает для @WebMvcTest с JUnit 5 и Sping Boot 2?
Я исследовал подобные вопросы на StackOverflow и не могу найти основную причину в моем случае.
КОНТЕКСТ:
У меня есть @RestController в SpringBoot 2 с зависимостью от BookSearcherService . Я хочу издеваться над BookSearcherService для того, чтобы протестировать контроллер.
ОШИБКА:
org.springframework.web.util.NestedServletException: обработка запроса не удалась; вложенное исключение — java.lang.NullPointerException в org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1013) в org.springframework.web.servlet.FrameworkServlet.doGet) в javascript-слое .http.HttpServlet.service(HttpServlet.java:634) в org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) в org.springframework.test.web.servlet.TerDispatserSservServserser: 71) в javax.servlet.http.HttpServlet.service(HttpServlet.java:741) в org.springframework.mock.web.MockFilterChain $ ServletFilterProxy.doFilter(MockFilterChain.java:mock.weg.weg.rag.weg.weg.weg.weg.rag.weg.weg.rag.weg.weg.rag.weg.weg.rag.weg.rag.weg.weg.weg.rag.weg.weg.weg.rag.weg.weg.weg.weg.weg.weg.weg.rag.weg.weg.rag.weg.weg.weg.weg.weg.weg.weg.weg.weg.weg.wef.raf. org). MockFilterChain.doFilter(MockFilterChain.java:133) по адресу org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) по адресу org.springframeest.web.filter.jj.Ferter.Fter(FF).springframework.mock.web.MockFilterChain.doFilter(MockFilterChai n.java:133) по адресу org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) по адресу org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFowork.rack)..web.MockFilterChain. ) в org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:133) в org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:182) в com.search.book.Bookar controller.BookSearcherControllerMockMvcTest.canListAll(BookSearcherControllerMockMvcTest.java:54) при sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) при sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl. J ava: 43) в java.lang.reflect.Method.invoke(Method.java:498) в org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:532) в org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115) по адресу org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda $ invokeTestMethod $ 6 (TestMethodTestDescriptor.java:17jenh.t.p. ThrowableCollector.execute(ThrowableCollector.java:72) в org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:167) в org.junitThoes.hoxt.ordes.orcript.or.jet 114) по адресу org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:59) по адресу org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda $ executeTeck. org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(Throwable Collector.java:72) в org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:98) в org.junit.platform.engine.support.hierarchical.NodeTestTaskex: 74) в java.util.ArrayList.forEach(ArrayList.java:1257) в org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.it.j.jt.jpg).hierarchical.NodeTestTask.lambda $ executeRecursively $ 4 (NodeTestTask.java:112) в org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.jlat:72.pl.jort.jt. ierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:98) в org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:74) в java.util.ArrayList.forE в org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThrea dHierarchicalTestExecutorService.java:38) в org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda $ executeRecursively $ 4 (NodeTestTask.java:112) в org.junit.platform.enrowierarColorTorical.sulectort.java: 72) в org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:98) в org.junit.platform.engine.support.hierarchical.NodeTestTask.javaTaste(NoTestTask.execute(. junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) в org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220) в org.junc.un core.DefaultLauncher.lambda $ выполнять $ 6 (по умолчанию Launcher.java:188) в org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202) в org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.j::18 или atg: default.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) в org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:89) в org.ecl.junit.runner.TestExecution.run(TestExecution.java:41) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541) в org.eclipse.jdt.inun..RemoteTestRunner.runTests(RemoteTestRunner.java:763) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) в org.eclipse.jdt.intemun.unitRit(RemoteTestRunner.java:209) Вызывается: java.lang.NullPointerException в com.search.book.Booksearcher.controller.BookSearcherController.listAll(BookSearcherController.java:31) в sun.reflect.N ativeMethodAccessorImpl.invoke0 (нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke(methodava.tho.jj Java: 498) в org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) в org.springframework.web.method.support.InvocableHandlerMethog.web..web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) в org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) в org.springframework.web.servlet.DispatcherServlet.doService:pr. web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005). еще 59
КОД:
pom.xml
ВОПРОС:
Проблема, как я уже говорил выше, заключается в том, что BookSearcherService при выполнении вызова на mockMvc имеет значение null . Это означает, что либо @MockBean не работает, либо я сделал ошибку, которую не могу обнаружить в течение нескольких часов. Я использую Java8 .
Источник