0

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

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

我很感激你的帮助。

编辑:我必须使用数据库。让我们考虑一下它们是重新集成测试。

4

3 回答 3

1

You can use an HSQLDB file: database with the default MEMORY tables.

After generating the dataset, add the property files_readonly=true to the database.properties file. You then run the tests with this database. This ensures your tests run and modify the data the same way as a mem: database, but the changes made by the tests are not persisted when the test process ends. The original data is loaded in a few seconds in the fastest possible way.

于 2013-09-12T07:44:00.470 回答
1

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

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

于 2013-09-11T14:25:13.723 回答
0

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

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

我在这里找到了

于 2013-09-11T14:54:53.627 回答