2014-01-05 86 views
0

我使用了Spring Framework 2.5.6 我在春天的beans.xml文件中定義的數據源之後,我才能用在我的遠程數據庫連接:數據源注入拋出異常

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

    <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <property name="url" value="jdbc:mysql://localhost:3306/sample"/> 
    <property name="username" value="root"/> 
    <property name="password" value="root"/> 

</bean> 

這是我的JUnit集成測試的樣子:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "spring-beans.xml") 
public class MyIntegrationTest { 

    @Autowired 
    DataSource dataSource; 

} 

我在同一個包複製的彈簧beans.xml的文件,其中我已經上傳所在的測試用例代碼。

但是我出現以下情況例外,當我運行測試用例:

SEVERE: Caught exception while allowing TestExecutionListener [org.springframewor[email protected]9a8d9b] to prepare test instance [[email protected]] 
java.lang.IllegalStateException: Failed to load ApplicationContext 
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:201) 
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) 
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) 
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:255) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:111) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:148) 
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:61) 
at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:54) 
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34) 
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) 
at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:52) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 


Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [tests/spring-beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [tests/spring-beans.xml] cannot be opened because it does not exist 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:349) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:81) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:42) 
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:173) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:197) 
    ... 17 more 


Caused by: java.io.FileNotFoundException: class path resource [tests/spring-beans.xml] cannot be opened because it does not exist 
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:143) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) 
    ... 26 more 

任何想法,爲什麼這可能發生?

+0

它正在尋找名爲test的目錄中的xml文件,但沒有找到它。測試目錄必須位於您認爲的地方以外的地方。 – Julian

回答

0

您需要將spring-beans.xml放入類路徑中 - 而不是源代碼所在的包。

如果您使用Maven或Gradle構建,則將文件放入src/test/resources

否則,將其放在任何位置,並手動將其與FileSystemXmlApplicationContext一起加載到測試夾具的設置中。

+0

我在setUpBeforeClass中編寫了這段代碼:ApplicationContext context = new FileSystemXmlApplicationContext(「/ src/main/resources/spring-beans.xml」);但是,我如何使用上下文變量來加載@Autowired DataSource數據源中的數據? – SteveSt

0

如果您使用的是Maven,您應該使用src/test/resources文件夾。運行測試時,Maven可以複製它。

+0

我使用的是正確的maven。但是測試不在src/test/java文件夾中,而是在src/main/java中的另一個文件夾中。我使用src/main/resources文件夾,但它仍然沒有找到它 – SteveSt