Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在集成测试中设置保存点(内存中有hsqldb)?_Java_Sql_Jpa_Hsqldb_Savepoints - Fatal编程技术网

Java 如何在集成测试中设置保存点(内存中有hsqldb)?

Java 如何在集成测试中设置保存点(内存中有hsqldb)?,java,sql,jpa,hsqldb,savepoints,Java,Sql,Jpa,Hsqldb,Savepoints,我有与hsqldb(内存中)的集成测试,现在我需要在测试中设置保存点,在BaseTest类中,如何在测试中设置保存点(hsqldb(内存中)) 基本测试: @ContextConfiguration(classes = {TestConfig.class}) public class BaseTest { @Before public void savePoint() { //set savepoint - How can do it this? }

我有与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 {

...

}
它帮助了我:

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
    }