[英]Spring configuration launch before each unit test for the same test class
我尝试将hsqldb(内存db)集成到我的项目中,因为从一开始,所有DAO都使用真实的数据库进行了测试,并且它不是很安全,因为当数据库未启动时,jenkins未能通过所有测试!
但是当我参加一个测试班时,我看到了一些奇怪的东西。
我班上有三个测试,当我用eclipse作为junit测试运行时,我看到在每个单元测试之前重新加载了spring配置。 正常吗 因为我有用
<prop key="hibernate.hbm2ddl.import_files">import.sql</prop>
并且该文件包含许多创建表,并且在启动第二项测试时,我看到错误消息:“表toto已经存在...”
是否可以在该类的所有测试中仅加载一个spring配置?
这是我的配置:
<bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:mem:castor;syntax.ora=true" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingLocations" value="classpath*:fr/**/*.hbm.xml"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">fr.edf.mpv2.castor.persistance.HsqlOracleDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.hbm2ddl.import_files">import.sql</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
</props>
</property>
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource"/>
<property name="rollbackOnCommitFailure" value="true"/>
</bean>
它是一个遗留项目,而使用spring启动该项目的人不知道其工作方式,因此他们不使用injection :(而是创建一个加载spring配置的工厂,而不是使用applicationContext.xml ...
所以为了帮助开发人员,我创建了一个模拟来覆盖测试环境中的工厂
这是声明:
public class MailDAOTest extends BeanFactoryOverrider {
....
@RunWith(PowerMockRunner.class)
@PrepareForTest({ BeanFactory.class })
@PowerMockIgnore("javax.management.*")
public class BeanFactoryOverrider {
/** Context spring de test. */
private ApplicationContext applicationContext;
因此,在我们使用工厂的代码中到处都是我自己的springcontext,我重写了使用我自己的spring上下文和我自己的配置而不是实际生产配置的方法。 这项工作很好,但只是为了解释为什么我使用PowerkMockRunner;)
我使用spring 2.0 / hibernate 3.2.6 / hsql 2.3.2
非常感谢你的帮助!
如果您在测试类上指定上下文配置位置,并使用spring测试运行程序,则上下文将被缓存,而不会每次都重新加载。
就像是 :
@RunWith (SpringJUnit4ClassRunner.class)
@ContextConfiguration (locations = "classpath:/config/applicationContext-test.xml")
@WebAppConfiguration
public class MyTest {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.