在SpringBoot 2.0的测试中使用orm.xml

时间:2018-02-20 21:57:02

标签: spring jpa spring-boot spring-boot-test

我有一个SpringBoot 2.0应用程序,我决定使用orm.xml混合注释和XML配置。所以,我已将orm.xml(带有XML配置的JPA文件)放在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

2 个答案:

答案 0 :(得分:0)

我不得不将一些使用内存数据库的集成测试迁移到SpringBoot2,为了能够访问测试中的“ orm.xml”文件,我只是从“ src / main / resources / META- INF / orm.xml”改为“ src / 测试 /resources/META-INF/orm.xml”。

答案 1 :(得分:-1)

我使用spring with 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>

` ......我不知道这是否有帮助