2016-06-17 26 views
0

Ich habe Dateistruktur wie folgt konfiguriert werden:Samen application Arbeit mit Web-Anwendung, aber nicht mit Frühlings-Test (spock) arbeitet, verschachtelter Mybatis-config.xml nicht geöffnet werden kann

Project/ 
     war/ 
      WEB-INF/ 
       applicationContext.xml 
       mybatis-config.xml 
       (both two xml files are under same directory:WEB-INF) 

Mybatis config in application. xml wie folgt aus:

<!-- SqlSessionFactory --> 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="typeAliasesPackage" value="com.domain.model" /> 
     <property name="configLocation" value="WEB-INF/mybatis-config.xml" /> 
    </bean> 

Above Konfiguration funktioniert in Web-Anwendung, und ich habe eine spock Unit-Test wie folgt aus:

@ContextConfiguration(locations = "file:war/WEB-INF/applicationContext.xml") 
public class SeniorPerWorkerMsgPusherTest extends Specification { 

    @Autowired 
    MyBatisMapper mapper 
    ..... 
} 

Wenn es läuft, bekamen Schlag Fehler ausgedruckt:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:war/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: class path resource [WEB-INF/mybatis-config.xml] cannot be opened because it does not exist 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    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.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) 
    ... 124 more 
Caused by: java.io.FileNotFoundException: class path resource [WEB-INF/mybatis-config.xml] cannot be opened because it does not exist 
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172) 
    at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:407) 
    at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:381) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
    ... 131 more 

Frage ist: Warum mit Web-Anwendung nicht gleiche Arbeit application aber nicht mit Frühlings-Test (spock) arbeiten?

+0

Was passiert, wenn Sie Ihre Testklasse mit '@WebAppConfiguration („Krieg“)' annotieren passiert? –

Antwort

1

Sein hapends becouse Spring-Kontext für Test sollte in Ressourcen-Ordner sein. Sie sollten Sie Mybatis config Ressourcen bewegen oder versuchen, einen relativen Pfad zu Ihrem Kontext zu verwenden:

@ContextConfiguration({"classpath*:applicationContext.xml", "classpath*:mybatis-config.xml"})