2014-04-11 2 views
1

Я пытаюсь получить JUnit для запуска, но он продолжает бросать следующую ошибку:JUnit и Spring: Не удается найти persistence.xml - но она существует

class path resource [META-INF/persistence.xml] cannot be opened because it does not exist 

Весь StackTrace можно найти здесь: http://codepad.org/OhlyjQKn. Это проект Spring, с Hibernate (также использующий JPA). Проект работает нормально - он не жалуется на все недостающие файлы при запуске его в обычном режиме (не работает тест JUnit)

Я пытаюсь запустить следующий тест:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/classes/applicationContext.xml", 
            "file:src/main/webapp/WEB-INF/config/spring-security.xml"}) 
public class KeyServiceTests { 

    @Test 
    public void testKeyCreation() { 
     ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 
     KeyService keyService = (KeyService) context.getBean("keyService"); 
     // Some testing goes on here 
    } 
} 

EntityManagerFactory в applicationContext.xml определяется следующим образом: (весь файл здесь: http://codepad.org/UrCtj0pW)

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="persistenceUnitName" value="hsqldb-ds" /> 
    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/> 
</bean> 

мой путь к классам является src/main/webapp/WEB-INF/classes - который держит applicationContext.xml, а также META-INF/persistence.xml

persistence.xml определяется следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
<persistence-unit name="hsqldb-ds" transaction-type="RESOURCE_LOCAL"> 

    <description>HSQLDB Persistence Unit</description> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 

    <properties>    
     <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:demodb" /> 
     <property name="javax.persistence.jdbc.user" value="sa" /> 
     <property name="javax.persistence.jdbc.password" value="" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="validate" /> 
     <property name="hibernate.show_sql" value="false" /> 
     <property name="hibernate.format_sql" value="true" /> 
     <property name="hibernate.transaction.flush_before_completion" value="true" /> 
    </properties> 
</persistence-unit> 

Так да. Он не может найти persistence.xml, но он существует там, где он должен существовать (относительно пути к классам), и проект только жалуется на файл при запуске JUnit. Кто-нибудь знает, что происходит, или что я должен делать, чтобы JUnit работал правильно? Я новичок в использовании JUnit с Spring/Hibernate, поэтому я, вероятно, ошибаюсь.

Сердечные приветы

ответ

1

мне нужно переместить META-INF/persistence.xml и applicationContext.xml в SRC/основные/ресурсы, чтобы получить JUnit, чтобы выяснить, где все необходимые файлы куда. Следующая строка в тесте JUnit затем изменен следующим образом:

@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) 

(Я также удалил ссылку на весенне-security.xml, потому что это было своего рода ненужными)

Большое спасибо пользователя Wintermute!

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