2013-04-08 4 views
0

У меня есть серия интеграционных тестов с использованием тестов Spring и базы данных памяти H2. Я заметил, что база данных h2 не откатывается после каждого теста.Весенний тест не откатывается после теста

Это мой конфиг:

@RunWith(SpringJUnit4ClassRunner.class) 
public class BlaServiceIntegrationTest extends AbstractTest { 

@Autowired 
private BlaService blaService; 

@Test() 
public void doBla() { 
    // some other test that writes in the database 
} 

@Test() 
public void saveNewBla() { 
    assertEquals(0, findAllBlas().size()); // <-- fails, the db is not empty. 
      // the previous test did not roll back 
} 

Тогда есть AbstractTest:

@ContextConfiguration(locations = { "classpath:test-with-db.xml" }) 
@TransactionConfiguration(defaultRollback = true) 
@Transactional() 
public class AbstractTest { 


private static final Logger LOG = LoggerFactory.getLogger(AbstractTest.class); 

@Autowired 
protected SessionFactory sessionFactory; 


public AbstractTest() { 
    super(); 
} 

@SuppressWarnings("unchecked") 
protected List<Bla> findAllBlas() { 
    return sessionFactory.getCurrentSession().createCriteria(Bla.class).list(); 
} 

Спринг конфигурация:

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource " 
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" 
    p:username="${jdbc.username}" p:password="${jdbc.password}"> 
</bean> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"></property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl}</prop> 
      <!-- <prop key="hibernate.use_sql_comments">false</prop> --> 

     </props> 
    </property> 
    <property name="packagesToScan" value="com.company.bla.back.domain"></property> 
</bean> 


<bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
    p:sessionFactory-ref="sessionFactory"> 
</bean> 

<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="hibernateConfiguration" factory-bean="&amp;sessionFactory" 
    factory-method="getConfiguration" /> 

И config.properties специфичного для теста:

################### MySQL JDBC Configuration ################## 
jdbc.driverClassName=org.h2.Driver 
jdbc.url=jdbc:h2:mem;DB_CLOSE_ON_EXIT=FALSE 
jdbc.username= 
jdbc.password= 

################### Hibernate Configuration ########################## 
hibernate.dialect=org.hibernate.dialect.H2Dialect 
hibernate.show_sql=false 
hibernate.hbm2ddl=create-drop 
hibernate.generate_statistics=false 

И сервис тестируется:

@Service("blaService") 
@Transactional(propagation = Propagation.MANDATORY) 
public class BlaServiceImpl implements BlaService { 

ответ

0

Ничего, я нашел решение сам. Это вовсе не проблема отката? Произошла ошибка в методе findAllBla()? Он нуждался в:

.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY) 
Смежные вопросы