2014-01-05 4 views
0

Я использую Spring Framework 2.5.6 У меня есть следующие DATASOURCE определены в моем файле весна-beans.xml, который я использую для того, чтобы соединить в своей удаленной базе данных:инъекции DataSource в SpringFramework2 бросает исключение

<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

Он ищет файл xml в каталоге под названием test и не находит его. Тест-каталог должен быть где-то другим, чем вы думаете. – 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 dataSource? – SteveSt

0

Если вы используете Maven, вы должны использовать папку src/test/resources. Maven может скопировать его во время выполнения тестов.

+0

Я использую maven, это правильно. Но тесты не находятся в папке src/test/java, но в другой папке insinde src/main/java. Я использую папку src/main/resources, но она все равно ее не находит – SteveSt

Смежные вопросы