【问题标题】:How can to set savepoint in integration tests (with hsqldb in-memory)?如何在集成测试中设置保存点(使用内存中的 hsqldb)?
【发布时间】:2015-09-17 01:19:51
【问题描述】:

我有与 hsqldb 的集成测试(在内存中),现在我需要在我的测试中设置保存点,在 BaseTest 类中,如何在测试中设置保存点(hsqldb(内存中))?

基础测试:

@ContextConfiguration(classes = {TestConfig.class})
public class BaseTest {

    @Before
    public void savePoint() {
        //set savepoint - How can do it this?

    }

    @After
    public void rollBackToSavePoint() {
        //roll back to savepoint - How can do it this?

    }
}

我的测试:

@RunWith(SpringJUnit4ClassRunner.class)
public class MyTest extends BaseTest {

    @Test
    public void test1() {
     ...
    }
}

测试配置:

import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;

@Configuration
@EnableJpaRepositories("database.dao")
@ComponentScan(basePackageClasses = { MyServiceImpl.class})
@EntityScan({"database.model"})
@Import({DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class TestConfig {

...

}

【问题讨论】:

    标签: java sql jpa hsqldb savepoints


    【解决方案1】:

    它帮助了我:

    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.TransactionDefinition;
    import org.springframework.transaction.TransactionStatus;
    import org.springframework.transaction.support.DefaultTransactionDefinition;
    
        @Autowired
        private PlatformTransactionManager platformTransactionManager;
    
        @Test
        public void test1() {
            //save new user in db:
            userDao.save(new User("Name1")); //in result in db 1 user
            //set savepoint:
            TransactionStatus status = platformTransactionManager.getTransaction(
                    new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED));
            //do changes in db:
            userDao.save(new User("Name2")); //in result in db 2 users
            //roll back to savepoint:
            platformTransactionManager.rollback(status);
            userDao.findAll(); //in result in db 1 user
        }
    

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 2017-09-06
      • 2019-06-30
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2011-09-21
      • 2017-09-15
      • 2014-09-30
      相关资源
      最近更新 更多