簡體   English   中英

在相同測試類的每個單元測試之前啟動Spring配置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM