春季测试数据库回滚

时间:2020-03-29 11:23:15

标签: java spring spring-boot junit

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

const getAnnounces = (req, res, next) => {const { filter, skip, limit, sort, projection } = aqp(req.query);
Announces.find(filter)

我的问题是,如果一个测试类已完成,则会收到JdbcSQLIntegrityConstraintViolationException(唯一索引或主键冲突:..),因为我的数据库未相应地回滚,并且由于数据库未获取而再次执行了Insert语句已清除。有没有人提示如何解决该问题?有没有办法回滚插入或在插入完成后不进行插入?

2 个答案:

答案 0 :(得分:1)

您可以使用

注释测试类
@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)

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

您也可以使用

java.scripting

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

答案 1 :(得分:0)

一个简单的解决方案是使用DirtiesContext批注。该注释具有多个选项。您可以在测试类中使用以下行:

@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)

在执行测试类之前,将删除并重新创建上下文。