2012-02-17 8 views
3

私はいくつかのユニットテストを実行するためにSpringの組み込みデータベース(デフォルトDBはHSQLDBです)を使用しています。私は自分のコンテキストに次のようにありますHSQLDB/Springユニットテストがロールバックされない

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManger"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

<jdbc:embedded-database id="dataSource"> 
    <jdbc:script location="blah"/> 
</jdbc:embedded-database> 

は、ユニットテストのようなある:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:applicationContext.xml") 
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true) 
@Transactional 
public class DAOTest(){ 

    @Autowired 
    public MyDAO myDAO; 


    @Test 
    public void test1(){ 
     List list = myDAO.getHibernateTemplate.loadAll(Hit.class); 
     assertThat(list.size(), equalTo(0)); 

     Hit hit = new Hit(); 
     myDAO.saveHit(hit); 

     list = myDAO.getHibernateTemplate.loadAll(Hit.class); 
     assertThat(list.size(), equalTo(1)); 
    } 

    @Test 
    public void test2(){ 

     List list = myDAO.getHibernateTemplate.loadAll(Hit.class); 
     assertThat(list.size(), equalTo(0)); 
    } 

} 

私は上記を実行すると、1つの要素を持つリストが返されるので、テスト2が失敗しました。テスト間でロールバックが行われないのはなぜですか?

答えて

3

だからわかった。問題は私がDataSourceTransactionManagerを使用していたことですが、コードでHibernateを使用していたため、HibernateTransactionManagerを使用する必要がありました。

関連する問題