为什么建议为每个测试重新创建整个数据库模式?
Why is recommended to recreate the whole database schema for each test?
据说为了使用 Spring data(JPA) 执行数据库测试,最好为每个测试重新创建整个数据库模式,以便在之后从数据库中删除所有对象测试并为下一次测试清理整个环境(https://reflectoring.io/spring-boot-data-jpa-test/). But according to the question I made (),如果建议为测试数据库创建整个模式而不仅仅是它的一部分,为什么不为所有测试重用这个模式如果他们共享相同的模式并只删除数据?
谢谢
重点是确保您的测试是独立的,并且测试所需或生成的数据不会影响其他测试的结果。
重新创建架构可为您提供此保证,因为每个测试都将从一个干净的数据库开始。
也就是说,模式的 creation/drop 是一项相当繁重的操作,您添加到测试套件的测试越多,它就会变得越慢。
缺点是您需要确保在每次测试后都清理数据。这在实践中可能不会太复杂(您可能需要特别注意不同测试中的不同实体映射到具有相同名称的 table)但是如果您正在做一个小项目或者您的数据库确实是快速更新架构,可能不值得这么麻烦。
由您决定什么适合您的项目。
举个实际的例子,在Hibernate Reactive中我们需要运行在几个不同的数据库上进行相同的测试。我们开始为每个单元测试重新创建工厂,但是因为 运行ning 测试变得太慢(尤其是在某些数据库上),我们已经切换到为每个测试重新创建工厂一次 class.它帮助我们节省了大量时间,因为在同一个 class 中进行测试变得非常快。
最后,您需要决定测试套件的组织方式以及一种方法相对于另一种方法的优势。但只要您合理确定测试不会相互影响,就可以使用您喜欢的解决方案。
据说为了使用 Spring data(JPA) 执行数据库测试,最好为每个测试重新创建整个数据库模式,以便在之后从数据库中删除所有对象测试并为下一次测试清理整个环境(https://reflectoring.io/spring-boot-data-jpa-test/). But according to the question I made (
谢谢
重点是确保您的测试是独立的,并且测试所需或生成的数据不会影响其他测试的结果。
重新创建架构可为您提供此保证,因为每个测试都将从一个干净的数据库开始。
也就是说,模式的 creation/drop 是一项相当繁重的操作,您添加到测试套件的测试越多,它就会变得越慢。 缺点是您需要确保在每次测试后都清理数据。这在实践中可能不会太复杂(您可能需要特别注意不同测试中的不同实体映射到具有相同名称的 table)但是如果您正在做一个小项目或者您的数据库确实是快速更新架构,可能不值得这么麻烦。
由您决定什么适合您的项目。
举个实际的例子,在Hibernate Reactive中我们需要运行在几个不同的数据库上进行相同的测试。我们开始为每个单元测试重新创建工厂,但是因为 运行ning 测试变得太慢(尤其是在某些数据库上),我们已经切换到为每个测试重新创建工厂一次 class.它帮助我们节省了大量时间,因为在同一个 class 中进行测试变得非常快。
最后,您需要决定测试套件的组织方式以及一种方法相对于另一种方法的优势。但只要您合理确定测试不会相互影响,就可以使用您喜欢的解决方案。