在 Spring Boot 测试之前初始化数据库

新手上路,请多包涵

我正在使用 JUnit 测试我的应用程序,只要数据库在测试前已初始化(使用 gradle bootRun 作为 Web 应用程序运行),一切正常。但是,如果数据库为空,则应用程序似乎不会在测试前初始化任何模型或实体。有没有办法我应该这样做?我假设 ApplicationRunner 类将在测试之前运行并初始化实体。有没有办法做到这一点,还是我使用了错误的方法?

这就是我的 application.properties 文件的样子:

 server.port=8090
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=123456
server.ssl.key-password 123456
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.hibernate.naming-strategy:org.hibernate.cfg.ImprovedNamingStrategy
application.logger.org.springframework=INFO

我的数据库存储在 /src/main/java/application/persistence/DbConfig.java 使用 DriverManagerDataSource 连接。我有设置 ApplicationRunner 在启动时运行添加几行到数据库。

编辑:

我还应该补充说,这些是我在 JUnit 测试文件上使用的注释:

 @RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={
    AdeyTrackApplication.class,
    SecurityConfig.class,
    WebConfig.class,
    AuthorizationController.class
    })

原文由 px06 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 833
2 个回答

上面的答案都使用了 .sql 模式加载技术,我必须有一个 .sql 模式来进行测试。我不想那样做,因为我的模式会扩展,而且我不想在测试扩展时经历向模式添加条目的麻烦。

当我使用 Spring Boot 时,我遇到了这个注释,它似乎通过首先运行 bootRun 然后运行测试来解决问题。

在我的测试注释中,我将 @ContextConfigurations 替换为 --- @SpringApplicationConfiguration 并保留所有类相同。这似乎解决了这个问题。所以现在 test 任务调用 bootRun 来加载类, 然后 运行测试。

参见 @SpringApplicationConfiguration

希望这可以帮助任何面临同样问题的人。

原文由 px06 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您不想从 @Before JUnit 挂钩中显式执行该操作,则有多种选择。

  1. 使用 Spring Boot 的 JDBC 初始化功能,您可以将 schema.sqldata.sql 放入 src/test/resources 文件夹,这样只有在测试期间才会被拾取
  2. 使用 Spring 的 @Sql 注解

原文由 luboskrnac 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题