2017-11-15 6 views
1

SpringMVCの設定では、小さなSpringアプリケーションについて主な機能をテストしたいだけです。
これはspring/spring-mvc.xmlファイルで私のSpringMVCの設定です:main関数でテストすると、SpringMVCの設定が間違っています

<mvc:resources mapping="/BasePlu/**" location="classpath:/static/BasePlu/" /> 
<mvc:resources mapping="/Lib/**" location="classpath:/static/Lib/" /> 

<bean id="natureRepository" class="com.autumnframework.blog.repository.NatureRepositoryImpl"> 
</bean> 

これはTest.javaファイルの私のテストコードです:下記のような

public static void main(String[] args) { 
    ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
      "classpath:/spring/spring-mvc.xml"); 

    Repository repository = context.getBean(NatureRepositoryImpl.class); 
    System.out.println("4. " + repository.getAllObjects()); 
} 

間違っ詳細:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0': Invocation of init method failed; nested exception is java.lang.IllegalStateException: WebApplicationObjectSupport instance [ResourceHttpRequestHandler [locations=[class path resource [static/BasePlu/]], resolvers=[[email protected]bd930a]]] does not run in a WebApplicationContext but in: org[email protected]1a86f2f1: startup date [Wed Nov 15 10:31:23 CST 2017]; root of context hierarchy 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1589) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:554) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
at Test.main(Test.java:26) 
Caused by: java.lang.IllegalStateException: WebApplicationObjectSupport instance [ResourceHttpRequestHandler [locations=[class path resource [static/BasePlu/]], resolvers=[[email protected]bd930a]]] does not run in a WebApplicationContext but in: org[email protected]1a86f2f1: startup date [Wed Nov 15 10:31:23 CST 2017]; root of context hierarchy 
at org.springframework.web.context.support.WebApplicationObjectSupport.getWebApplicationContext(WebApplicationObjectSupport.java:112) 
at org.springframework.web.context.support.WebApplicationObjectSupport.getServletContext(WebApplicationObjectSupport.java:128) 
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.initContentNegotiationStrategy(ResourceHttpRequestHandler.java:306) 
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.afterPropertiesSet(ResourceHttpRequestHandler.java:268) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1648) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1585) 
... 12 more 

私がコメントしますspring/spring-mvc.xmlファイル内の2行:

<!--<mvc:resources mapping="/BasePlu/**" location="classpath:/static/BasePlu/" />--> 
<!--<mvc:resources mapping="/Lib/**" location="classpath:/static/Lib/" />--> 

<bean id="natureRepository" class="com.autumnframework.blog.repository.NatureRepositoryImpl"> 
</bean> 

正常に実行できますが、この方法で正常に実行できる理由はわかりません。

+0

この 'spring-mvc.xml'設定がスタンドアロンアプリケーションで実行される理由について詳しく知りたいですか?アプリケーションはWebとスタンドアロンの両方で実行する必要がありますか?いくつかのユニットテストやその他の理由を実行したい場合は、より良い応答に役立ちます。 –

+0

私はユニットテストをしたいだけです。このユニットテストでは、2行のコメントには関係ありません。 –

+0

単体テストの場合は、JUnitを使用することをお勧めします。これにより、テストしているコード/構成に触れることはありません。ここでのいくつかのポインタは、 'https:// stackoverflow.com/questions/21388482/how-do-i-get-my-spring-junit-test-that-its-in-a-genericapplicationco' –

答えて

0

2つのMVCリソースがWebApplicationContextで実行する必要がありますが、WebApplicationContextを実装していませんClassPathXmlApplicationContext以内にそれを実行しています。スタックトレース状態でのエラーメッセージこの:

Caused by: java.lang.IllegalStateException: WebApplicationObjectSupport instance [ResourceHttpRequestHandler [locations=[class path resource [static/BasePlu/]], resolvers=[[email protected]bd930a]]] does not run in a WebApplicationContext but in: org[email protected]1a86f2f1: startup date [Wed Nov 15 10:31:23 CST 2017]; root of context hierarchy 

私はメイン内の前WebApplicationContextを作成しようとしていないが、あなたは代わりにXmlWebApplicationContextを使用して、あなたがより良い運を持っているかどうかを確認しようとする可能性があり。

MVCが有効になっているもの以外のバネ機能をテストする方法を探しているのであれば、mvcリソースをコメントアウトしたりコメントアウトしたり、2つのXML設定を行うことができます。 1つはあなたのウェブアプリ用で、もう1つはメインアプリ用です。

関連する問題