运行 SpringBootTest 时访问 H2 控制台

Geo*_*man 4 spring-boot spring-boot-test

如果我正在运行测试,@SpringBootTest有没有办法访问 H2 控制台?我有一个访问 H2 数据库的测试(成功),但是如果我想自己检查数据库,我该怎么做?

我开始与运行测试webEnvironment=DEFINED_PORTHTTP://本地主机:8080 /响应HTTP,但没有什么的http://本地主机:8080 / H2控制台/仍以404响应。

我尝试通过向以下项添加值来显式打开控制台application.properties

spring.h2.console.enabled=true
spring.h2.console.path=/h2
Run Code Online (Sandbox Code Playgroud)

那似乎没有效果。仍然是 404/h2-console/h2

H2 控制台似乎是通过自动配置进入的,所以我使用 开启了自动配置报告-Ddebug,我可以看到尽管在 application.properties 中启用了启用标志,但它被视为关闭:

H2ConsoleAutoConfiguration: 
      Did not match:
          - @ConditionalOnProperty (spring.h2.console.enabled=true) did not find property 'enabled' (OnPropertyCondition)
      Matched:
         - @ConditionalOnClass found required class 'org.h2.server.web.WebServlet'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
         - found WebApplicationContext (OnWebApplicationCondition)
Run Code Online (Sandbox Code Playgroud)

似乎某种机制application.properties在运行测试时覆盖了该值或忽略了该值。

Spring Boot Test 不启动控制台吗?有什么方法可以说服它这样做吗?

Geo*_*man 8

好的,我能够使用以下注释显示它(在 Kotlin 中): @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = arrayOf("spring.h2.console.enabled=true"))

即使这样,控制台仍然在/h2-console,所以它显然也忽略了控制台路径。我大概可以通过添加另一个属性来控制它。