我有一个项目,我正在为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?似乎有一些我没有得到的概念。 提前致谢。 非常感谢。
答案 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
希望这有助于某人。