H2弹簧靴测试跌落表

问题描述 投票:0回答:1

我是测试 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

之后是新的创作。 我的问题是:

  1. 此操作安全吗?或者是否会影响执行该操作的实际数据库?
  2. 为什么掉落总是完成?这有道理吗?
  3. 有没有办法减少所有这些日志?
java spring-boot h2
1个回答
0
投票
  1. 此操作安全吗?或者是否会影响执行该操作的实际数据库?
    是的,手术是安全的。在测试期间,您将 Spring Boot 配置为使用 H2 数据库,这是一个内存数据库。这与应用程序的主数据库 (SQL Server) 完全分开。您观察到的

    drop table
    命令仅影响 H2 数据库,对 SQL Server 数据库没有影响。

  2. 为什么掉落总是完成?这句话有道理吗?
    执行

    drop table
    命令是为了确保每次测试都有一个“干净”的环境。运行测试时,您希望确保每个测试都是独立的,并且先前的测试不会影响后续的测试。通过在每次测试之前删除并重新创建表,您可以确保您的测试不会受到先前测试中的残留数据的影响。

  3. 有没有办法减少所有这些日志? 是的,您可以在

    application.properties
    application.yaml
    中配置日志记录级别以进行测试。以下是您可以添加到属性文件中的示例命令:

    logging.level.org.hibernate.SQL=ERROR
    

    这会将 Hibernate SQL 日志级别设置为

    ERROR
    ,这意味着它只会记录指示错误的消息。这可能会大大减少您看到的日志数量。

另外,请注意,pom.xml 中的

<scope>test</scope>
标记可确保这些依赖项仅适用于您的测试阶段,不会影响其他环境。

© www.soinside.com 2019 - 2024. All rights reserved.