如何快速在junit测试中重新加载数据库数据?

时间:2013-09-11 14:17:31

标签: java spring junit hsqldb

我用Spring和Hibernate开发Java应用程序。现在我正在寻找一种在测试之间快速重新加载数据的解决方案。测试需要大量数据,这些数据是通过服务生成和持久化的。作为db我在内存中使用hsqldb。数据生成过程大约需要30秒,因此在每次测试之前只需运行它就太长了。

所以我想知道这是不是一个好主意,如果hsqldb可以在测试用例或套件的开头运行一次数据加载器,那么创建一个转储并在每次测试之前恢复它?我找不到如何在hsqldb中创建转储,特别是如果它在内存db中。

我赞美你的所有帮助。

编辑:我必须使用数据库。让我们考虑他们重新进行集成测试。

3 个答案:

答案 0 :(得分:1)

您可以使用dbUnit在每次测试之前和之后加载和清理数据库,但我认为这不会提高您的性能。

相反,我会问为什么你需要这么多的单元测试数据? 30秒对于实际访问数据库的集成测试来说并不算太糟糕,但我认为您应该努力让单元测试完全不会访问数据库,而是使用模拟对象来模拟与您的服务进行交互。然后,您可以进行实际使用数据库的少数集成测试,但这些测试不必涵盖所有场景,因为更快的单元测试应该已经完成​​。

答案 1 :(得分:1)

您可以将HSQLDB file:数据库与默认的MEMORY表一起使用。

生成数据集后,将属性files_readonly=true添加到database.properties文件中。然后,您使用此数据库运行测试。这可确保您的测试以与mem:数据库相同的方式运行和修改数据,但测试过程结束时,测试所做的更改不会保留。原始数据会以最快的方式在几秒钟内加载。

答案 2 :(得分:0)

尝试在测试类中使用此注释

@TransactionConfiguration(transactionManager="nameOfYourTransactionManager", defaultRollback=true)

我发现它here