Использование orm.xml в тестах SpringBoot 2.0

У меня есть приложение SpringBoot 2.0, и я решил смешать аннотации и конфигурацию XML, используя orm.xml. Итак, я поставил orm.xml (файл JPA с конфигурацией XML) в resources/META-INF, и, при запуске приложения, это учитывается, и все хорошо, работает как шарм.

Однако при запуске интеграционных тестов (которые используют базу данных в памяти) orm.xml, похоже, полностью игнорируется, поскольку тест завершается с ошибкой с исключением, связанным с отсутствующим сопоставлением, сопоставление, которое я написал в orm.xml (встраиваемая сущность).

Вот как выглядит тест:

package hello;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
@DataJpaTest
public class ApplicationTests {

    @Test
    public void contextLoads() {
    }

}

Я также пробовал @AutoConfigureTestDatabase вместо @DataJpaTest, но безуспешно.

Что нужно изменить, чтобы интеграционный тест загружал orm.xml?


person Vlad Dinulescu    schedule 20.02.2018    source источник
comment
это в persistence.xml? или какое-либо оправдание для стандартного использования Spring?   -  person    schedule 21.02.2018
comment
Проверьте это.... stackoverflow.com/questions/32536200/   -  person osama yaccoub    schedule 21.02.2018


Ответы (2)


Мне пришлось перенести некоторые интеграционные тесты, которые использовали базу данных в памяти, на SpringBoot2, и для того, чтобы иметь доступ к файлу «orm.xml» в тестах, я просто скопировал его из «src/main/resources/META-INF/orm. .xml" в "src/test/resources/META-INF/orm.xml".

person Ungureanu Adrian    schedule 15.05.2020

Я использовал Spring с junit (не Spring Boot), и я аннотировал тестовый класс следующим образом:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "appContextTest.xml" })

и внутри appContextTest.xml у меня есть импорт:

<import resource="classpath:config-test.xml" />

РЕДАКТИРОВАТЬ: содержимое файла выглядит следующим образом (у него есть определение источника данных и свойства гибернации:

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
    <property name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:serv"/>
    <property name="user" value="us"/>
    <property name="password" value="pass"/>
</bean>
.

.

.
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop> 
        </props>
    </property>

` ... Не знаю, поможет это или нет.

person osama yaccoub    schedule 21.02.2018
comment
Я пробовал это, но это не работает, поскольку тег ‹import› импортирует определения компонентов XML, а orm.xml — это файл JPA и, следовательно, не имеет отношения к Spring. - person Vlad Dinulescu; 21.02.2018