我的 JUnit 测试会更改数据库吗?

Does my JUnit test changes the database?

我一直在为我的程序编写单元测试。我编写了一个将数据插入数据库的测试,然后检查是否确实添加了该数据。所以现在我想知道这个测试是否真的将数据永久添加到数据库中(我无法访问它,因为它不是我的所以我无法检查)。如果有人能给我一个答案,那就太棒了。

提前致谢!

是的。

如果您不想对数据库进行任何更改,请使用您在本地设置的模拟数据库,或者在添加并检查后删除插入的数据。 实际上。您应该始终删除您添加的数据,否则单元测试将在第一次执行后变得无用,因为数据将不再添加,因为它已经存在并且断言将始终成功。

单元测试确实不应该将数据插入数据库。您应该改用数据库模拟框架。

另一方面,集成测试测试这样的多层交互。

这很重要,因为通常单元测试是在构建时执行的,而集成测试是在签入版本控制之前或在持续集成构建期间临时执行的。

尽管如此,要回答您的问题,您应该在可以回滚的事务或会话中进行插入。

或者,您也可以覆盖应用程序上下文中的数据源连接参数以指向临时本地 in-memory database,例如 H2。

另一个不太可取的选择是在测试、测试用例或测试套件完成后清理数据。

这里有一些可以帮助您测试数据库事务的 JUnit 模拟库: