我正在使用 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 许可协议
上面的答案都使用了 .sql 模式加载技术,我必须有一个 .sql 模式来进行测试。我不想那样做,因为我的模式会扩展,而且我不想在测试扩展时经历向模式添加条目的麻烦。
当我使用 Spring Boot 时,我遇到了这个注释,它似乎通过首先运行
bootRun
然后运行测试来解决问题。在我的测试注释中,我将
@ContextConfigurations
替换为 ---@SpringApplicationConfiguration
并保留所有类相同。这似乎解决了这个问题。所以现在test
任务调用 bootRun 来加载类, 然后 运行测试。参见 @SpringApplicationConfiguration
希望这可以帮助任何面临同样问题的人。