我是春天的新手,在运行一些测试时遇到了一些问题。我有一些带有以下代码的测试类,这些代码应该回滚我的(在内存h2中)数据库:
const getAnnounces = (req, res, next) => {const { filter, skip, limit, sort, projection } = aqp(req.query);
Announces.find(filter)
我的问题是,如果一个测试类已完成,则会收到JdbcSQLIntegrityConstraintViolationException(唯一索引或主键冲突:..),因为我的数据库未相应地回滚,并且由于数据库未获取而再次执行了Insert语句已清除。有没有人提示如何解决该问题?有没有办法回滚插入或在插入完成后不进行插入?
答案 0 :(得分:1)
您可以使用
注释测试类@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
并且Spring将处理所有事情(这意味着每个测试将在其自己的事务中运行,此事务将在之后回滚)。
您也可以使用
java.scripting
但这很麻烦,因为必须重新创建整个Spring上下文。
答案 1 :(得分:0)
一个简单的解决方案是使用DirtiesContext
批注。该注释具有多个选项。您可以在测试类中使用以下行:
@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
在执行测试类之前,将删除并重新创建上下文。