Spring属性文件覆盖了Spring测试属性文件

时间:2016-04-15 08:11:07

标签: java spring unit-testing jpa configuration

我有一个项目,我正在为DAO(JPA)层设置Spring测试配置。我的测试配置被加载但仅在主配置之后,特别是属性文件。因此,我的测试不是尝试连接到HSQLDB,而是连接到“真正的”PostGre数据库。

这是我的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/spring-dao-test.xml"})
@Transactional
@Rollback
public class EnseigneDaoTest {

    @Autowired
    EnseigneDao enseigneDao;

    public EnseigneDaoTest() {
        // TODO Auto-generated constructor stub
    }

    @Test
    public void testFindById() {
        Enseigne enseigne = enseigneDao.findById(Enseigne.class, "4");

        assertNotNull(enseigne);
        assertEquals("Auchan should have ID 4", "Auchan", enseigne.getLibelle());
    }
}

这是spring-dao-test.xml:     

<!-- Searches for entities in this package, no need for Persistence.xml -->
<context:component-scan base-package="fr.xxx.ddc.dao" />

<context:property-placeholder
    location="classpath:fr/insee/config/ddc-dao-test.properties"/>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="fr.xxx.ddc.model" />
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaDialect" ref="jpaDialect" />
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">${fr.xxx.ddc.hibernate.hbm2ddl.auto}</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.max_fetch_depth">${fr.xxx.ddc.hibernate.max_fetch_depth}</prop>
            <prop key="hibernate.default_batch_fetch_size">${fr.xxx.ddc.hibernate.default_batch_fetch_size}</prop>
            <prop key="hibernate.id.new_generator_mappings">true</prop>
        </props>
    </property>
</bean>
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="database" value="HSQL"/>
    <property name="showSql" value="true"/>
    <property name="generateDdl" value="true"/>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${fr.xxx.database.ddc.driverClassName}"/>
    <property name="url" value="${fr.xxx.database.ddc.url}" />
    <property name="username" value="${fr.xxx.database.ddc.username}" />
    <property name="password" value="${fr.xxx.database.ddc.password}" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven />

ddc-dao-test.properties:

fr.xxx.ddc.hibernate.schema=ddc
fr.xxx.ddc.hibernate.max_fetch_depth=3
fr.xxx.ddc.hibernate.default_batch_fetch_size=15
fr.xxx.ddc.hibernate.hbm2ddl.auto=create
fr.xxx.ddc.hibernate.show_sql=false

#Driver H2 pour test
fr.xxx.database.ddc.driverClassName=org.hsqldb.Driver

fr.xxx.database.ddc.url=hsqldb:mem:
fr.xxx.database.ddc.username=sa
fr.xxx.database.ddc.password=

我得到以下日志:

09:24:40.262 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding [class path resource [fr/insee/config/ddc-dao.properties]] PropertySource with lowest search precedence
[...]
09:24:41.717 [main] INFO org.springframework.context.support.PropertySourcesPlaceholderConfigurer - Loading properties file from class path resource [fr/insee/config/ddc-dao-test.properties]
09:24:41.718 [main] DEBUG org.springframework.core.env.MutablePropertySources - Adding [localProperties] PropertySource with lowest search precedence
09:24:41.719 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Searching for key 'fr.xxx.ddc.hibernate.max_fetch_depth' in [environmentProperties]
09:24:41.719 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Searching for key 'fr.xxx.ddc.hibernate.max_fetch_depth' in [systemProperties]
09:24:41.720 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Searching for key 'fr.xxx.ddc.hibernate.max_fetch_depth' in [systemEnvironment]
09:24:41.720 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Searching for key 'fr.xxx.ddc.hibernate.max_fetch_depth' in [class path resource [fr/insee/config/ddc-dao.properties]]
09:24:41.720 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'fr.xxx.ddc.hibernate.max_fetch_depth' in [class path resource [fr/insee/config/ddc-dao.properties]] with type [String] and value '3'
09:24:41.721 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'fr.xxx.ddc.hibernate.max_fetch_depth' in [environmentProperties] with type [String] and value '3'

如何摆脱ddc-dao.properties?似乎有一些我没有得到的概念。 提前致谢。 非常感谢。

1 个答案:

答案 0 :(得分:0)

最后我设法做到了。 <问题确实是

<context:component-scan base-package="fr.xxx.ddc.dao" />

加载DaoConfiguration.java,本身加载主.properties文件。 我需要排除类,这是这样做的:

<context:component-scan base-package="fr.xxx.ddc.dao" >
    <context:exclude-filter type="assignable" expression="fr.xxx.ddc.dao.config.DaoConfiguration"/>
</context:component-scan>

然后我的DaoConfiguration不再加载,ddc-dao-config.xml或ddc-dao.properties也没有加载。我的内存数据库用作日志显示:

org.h2.jdbc.JdbcSQLException: Table "ENSEIGNES" not found

希望这有助于某人。

相关问题