2016-08-17 5 views
3

Ich versuche, einen einfachen Testfall in Spring Base Junit Testklasse zu starten. In diesem Skript, eine der Methoden in diesem Skript verwendet Anfrage Attribut wie folgt:(JUNIT/Spring 3.2) Keine fadengebundene Anfrage gefunden: Beziehen Sie sich auf Anfrageattribute außerhalb einer tatsächlichen Webanfrage

ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); 
return (User) attr.getRequest().getSession().getAttribute("user"); 

Also muß ich auf Anfrage Attribut festlegen, bevor das Testskript ausgeführt wird.

Testskript ist

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "/SpringConfig-servlet.xml"}) 
@WebAppConfiguration 
public class DocumentTest { 

//@Autowired 
//protected SessionFactory sessionFactory; 

@Autowired 
protected SetUpScript setUpScript; 

@Autowired MockHttpSession session; 

@Autowired MockHttpServletRequest request; 


@Before 
public void setup() { 
    //Session session = sessionFactory.openSession(); 
    // TransactionSynchronizationManager.bindResource(sessionFactory,new SessionHolder(session)); 
    //MockHttpServletRequest request = new MockHttpServletRequest(); 
    //MockHttpSession session = new MockHttpSession(); 
    request.setSession(session); 
    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request)); 
} 

@Test 
public void test() { 
    setUpScript.saveDocument(); 
} 



} 

Aber es funktioniert nicht wie pro erwartet, ich unten Störung erhalte:

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122) 
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:105) 
    at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:74) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:312) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) 
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mailConnector': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.devdarshan.dao.GenericDaoImpl org.devdarshan.utility.MailConnector.mailApiDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory org.devdarshan.dao.GenericDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [SpringConfig-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate. 
ersister.entity.SingleTableEntityPersister 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:128) 
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) 
    ... 31 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.devdarshan.dao.GenericDaoImpl org.devdarshan.utility.MailConnector.mailApiDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory org.devdarshan.dao.GenericDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [SpringConfig-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285) 
    ... 47 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory org.devdarshan.dao.GenericDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [SpringConfig-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486) 
    ... 49 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory org.devdarshan.dao.GenericDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [SpringConfig-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285) 
    ... 60 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [SpringConfig-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486) 
    ... 62 more 
Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister 
    at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:185) 
    at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:386) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1794) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) 
    ... 72 more 
Caused by: org.hibernate.InstantiationException: could not instantiate test objectorg.devdarshan.beans.Document 
    at org.hibernate.engine.internal.UnsavedValueFactory.instantiate(UnsavedValueFactory.java:49) 
    at org.hibernate.engine.internal.UnsavedValueFactory.getUnsavedIdentifierValue(UnsavedValueFactory.java:68) 
    at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:75) 
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:145) 
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:507) 
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:146) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163) 
    ... 81 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at org.hibernate.engine.internal.UnsavedValueFactory.instantiate(UnsavedValueFactory.java:46) 
    ... 91 more 
Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request. 
    at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131) 
    at org.devdarshan.utility.UtilityServices.getUser(UtilityServices.java:27) 
    at org.devdarshan.beans.Auditable.<init>(Auditable.java:21) 
    at org.devdarshan.beans.Document.<init>(Document.java:13) 
    ... 96 more  

ich die folgenden wichtigsten Ressourcen gefunden

  1. http://docs.spring.io/autorepo/docs/spring/3.2.x/spring-framework-reference/html/testing.html
  2. Unit testing a method dependent to the request context

Ich habe auch Anforderungskontext listner in meiner web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 

    <display-name>Sample</display-name> 
    <welcome-file-list> 
     <welcome-file>index.htm</welcome-file> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

    <!-- Config here. --> 
<servlet> 
    <servlet-name>SpringConfig</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:SpringConfig-servlet.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>SpringConfig</servlet-name> 
     <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 

<!-- <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:SpringConfig-servlet.xml</param-value> 
    </context-param>--> 

    <listener> 

    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 

    </listener> 

    <error-page> 
    <error-code>404</error-code> 
    <location>/404error.jsp</location> 
    </error-page> 

    <jsp-config> 
    <jsp-property-group> 
    <display-name>SpringConfig</display-name> 
    <url-pattern>/WEB-INF/pages/*</url-pattern> 
    <el-ignored>false</el-ignored> 
    <scripting-invalid>false</scripting-invalid> 
    <is-xml>false</is-xml> 
    <include-prelude>/WEB-INF/pages/Minheader.jspf</include-prelude> 
    <include-coda>/WEB-INF/pages/Minfooter.jspf</include-coda> 
    </jsp-property-group> 

    <taglib> 
    <taglib-uri>customDateLib</taglib-uri> 
    <taglib-location>/META-INF/CustomDate.tld</taglib-location> 
    </taglib> 

</jsp-config> 

</web-app> 

Es gibt viele Lösungen availble auf Google hinzugefügt, aber keiner von ihnen für mich arbeiten. Ich weiß nicht, was schief geht. Ich habe fast mehr als den ganzen Tag damit verbracht, dies zu lösen, aber ich bin nicht in der Lage herauszufinden, was hier falsch läuft.

Schließlich bin ich mit folgenden Version

  1. Spring - 3.2.4.RELEASE
  2. Junit - 4,12

Jede Hilfe appreceated wird.

+1

Warum erstellen Sie beim Starten Ihrer Anwendung Instanzen eines 'Benutzers'? (Oder ist es in einem "statischen" Block noch schlimmer?).Abgesehen davon würde ich sagen, dass es eine schlechte Idee ist, für diese Logik von den Anforderungsattributen abhängig zu sein, da Sie jetzt Ihre gesamte Anwendung an die Webschicht gebunden haben. –

+0

Es ist im Konstruktor, wenn das Dokument erstellt wird. Ich erhalte ein Benutzerobjekt, um eine Prüfung zu erhalten, nach der das Dokument erstellt oder aktualisiert wird. Ich denke auch, dass das eine schlechte Idee ist, können Sie bitte vorschlagen, was auch immer Alternative sein könnte, wenn ich insbesondere überprüfen möchte, welche Benutzer Aktualisierung vorgenommen haben. – commit

+0

Dann noch einmal, warum erstellen Sie eine Instanz, wenn Sie die Anwendung starten ... Es passiert während des Starts der Anwendungen, warum? –

Antwort

0

Während der Initialisierung des Anwendungskontext instanziiert Hibernate ein Document-Objekt bei der Initialisierung es PersistanceFactory ist und es führt zu dem folgenden Fehler:

org.hibernate.InstantiationException: could not instantiate test objectorg.devdarshan.beans.Document 

Der Grund, warum Sie es nicht instanziiert kann nur unten:

Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request. 
at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131) 
at org.devdarshan.utility.UtilityServices.getUser(UtilityServices.java:27) 
at org.devdarshan.beans.Auditable.<init>(Auditable.java:21) 
at org.devdarshan.beans.Document.<init>(Document.java:13) 
... 96 more  

Im Konstruktor des Document Object verwenden Sie die UtilityServices.getUser() -Methode, die RequestContextHolder.currentRequestAttributes() verwendet. Es ist eine schlechte Übung, ein Objekt basierend auf Anforderungsparametern zu initialisieren. Wenn Sie dies tun müssen, muss der Bereich der "Anfrage" sein und Sie müssen es von einem Controller oder einem Filter mit Spring verbunden zu initialisieren ...

Ich empfehle dringend, die Art, wie Sie Ihren Bootstrap ändern Anwendung, um nicht auf den Servlet-Container angewiesen zu sein und ihn einfach testen zu können. Die Tatsache, dass Hibernate ein Objekt beim Start instanziiert, kann fraglich sein, aber da wir es nicht ändern können, müssen Sie es umgehen, indem Sie nicht von der Anforderung im Konstruktor des Dokuments abhängig sind. Es ist eine Einschränkung in der JPA-Implementierung von Hibernate.

+0

Ich werde auch mit deinem Vorschlag auf dasselbe Problem stoßen. Gib mir die Antwort zu Frage. Warum bekomme ich Fehler, obwohl ich Initialize Request Attribut habe? – commit

+0

Ich erkläre, warum Sie die Ausnahme haben, verwenden Sie die Anfrage während der Initialisierung von Spring-Kontext (während der Initialisierung einer Spring Bean, in seinem Konstruktor). Das ist dein Problem. Wenn Sie eine Scheinanforderung in Ihrem Test initialisieren, ist es zu spät, der Spring-Kontext ist aufgrund der @ContextConfiguration-Annotation bereits initialisiert. Um das Problem zu beheben, müssen Sie den Konstruktor Ihres Dokuments ändern, um die Anfrage nicht mehr zu verwenden. – loicmathieu

+0

Ich bekomme die gleiche Antwort, auch nachdem ich @WebAppConfiguration entfernt habe, kann ich nicht verstehen, warum DocumentObject beim Serverstart gestartet wird? – commit

Verwandte Themen