2012-02-17 81 views
3

我正在使用Spring的嵌入式数据库(默认数据库是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