我是测试 h2 的新手。我有一个小问题。在对我的 Spring Boot 应用程序(基于 sql server)执行测试期间,我使用 h2 作为仅用于测试的数据库。添加测试依赖后我 pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
并为 h2 添加属性,我使用
@Test
注释编写 juit 测试来插入用于测试存储库的数据:
@Test
@Sql(scripts = {
"classpath:/scripts/h2/test.sql",
})
所以一切正常。 但在日志文件中我看到
Hibernate:
drop table if exists TEST CASCADE
Hibernate:
drop table if exists TEST_2 CASCADE
之后是新的创作。 我的问题是:
此操作安全吗?或者是否会影响执行该操作的实际数据库?
是的,手术是安全的。在测试期间,您将 Spring Boot 配置为使用 H2 数据库,这是一个内存数据库。这与应用程序的主数据库 (SQL Server) 完全分开。您观察到的
drop table
命令仅影响 H2 数据库,对 SQL Server 数据库没有影响。
为什么掉落总是完成?这句话有道理吗?
执行
drop table
命令是为了确保每次测试都有一个“干净”的环境。运行测试时,您希望确保每个测试都是独立的,并且先前的测试不会影响后续的测试。通过在每次测试之前删除并重新创建表,您可以确保您的测试不会受到先前测试中的残留数据的影响。
有没有办法减少所有这些日志? 是的,您可以在
application.properties
或 application.yaml
中配置日志记录级别以进行测试。以下是您可以添加到属性文件中的示例命令:
logging.level.org.hibernate.SQL=ERROR
这会将 Hibernate SQL 日志级别设置为
ERROR
,这意味着它只会记录指示错误的消息。这可能会大大减少您看到的日志数量。
另外,请注意,pom.xml 中的
<scope>test</scope>
标记可确保这些依赖项仅适用于您的测试阶段,不会影响其他环境。