gpt4 book ai didi

java - Spring测试数据库回滚

转载 作者:行者123 更新时间:2023-12-02 08:48:49 24 4
gpt4 key购买 nike

我是 spring 新手,在运行一些测试时遇到了一些问题。我有一些带有以下代码的测试类,这些代码应该回滚我的(在内存中的 h2 中)数据库:

    @Autowired
PlatformTransactionManager txm;

TransactionStatus txstatus;

@BeforeEach
public void setupDB() {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
txstatus = txm.getTransaction(def);
assumeTrue(txstatus.isNewTransaction());
txstatus.setRollbackOnly();
}

@AfterEach
public void rollback() {
txm.rollback(txstatus);
}

我的问题是,如果一个测试类完成,我会得到一个 JdbcSQLIntegrityConstraintViolationException (唯一索引或主键冲突:..),因为我的数据库没有相应地回滚,并且再次执行插入语句,因为数据库没有得到已清除。有人知道如何解决这个问题吗?有没有办法回滚插入或在完成插入后不进行插入?

最佳答案

您可以使用

注释您的测试类
@Transactional

Spring 将处理所有事情(这意味着每个测试都将在其自己的事务中运行,之后将回滚)。

您还可以使用

@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)

但这很繁重,因为必须重新创建整个 Spring 上下文。

关于java - Spring测试数据库回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com