px0*_*x06 16 java mysql spring hibernate spring-boot
我正在使用JUnit来测试我的应用程序,只要数据库在测试之前已经初始化(使用gradle bootRun作为web-app运行),一切正常.但是,如果数据库为空,则应用程序似乎在测试之前不会初始化任何模型或实体.有没有办法我应该这样做?我假设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
Run Code Online (Sandbox Code Playgroud)
我的数据库/src/main/java/application/persistence/DbConfig.java使用DriverManagerDataSource连接存储.我已经设置ApplicationRunner好在启动时向db添加几行.
编辑:
我还应该补充一点,这些是我在JUnit测试文件中使用的注释:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={
AdeyTrackApplication.class,
SecurityConfig.class,
WebConfig.class,
AuthorizationController.class
})
Run Code Online (Sandbox Code Playgroud)
lub*_*nac 29
如果您不想从@BeforeJUnit钩子显式执行该选项,则有各种选项.
schema.sql或data.sql放入src/test/resources文件夹,以便仅在测试期间拾取它.您可以使用@Sql annotaion 来填充您的数据库,例如^
@Sql(scripts = "classpath:db/populateDB.sql")
Run Code Online (Sandbox Code Playgroud)
上面的答案全部使用.sql模式加载技术,其中我必须具有.sql模式进行测试。我不想那样做,因为我的架构会不断扩展,而我宁愿不要因为测试扩展而烦恼在架构中添加条目。
在使用Spring Boot时,我遇到了这个批注,它似乎可以通过先运行bootRun然后运行测试来解决问题。
在我的测试注释中,我将替换为@ContextConfigurations,@SpringApplicationConfiguration并使所有类保持相同。这似乎解决了问题。因此,现在该test任务调用bootRun加载类,然后运行测试。
参见@SpringApplicationConfiguration
希望这可以帮助面临相同问题的任何人。
| 归档时间: |
|
| 查看次数: |
35352 次 |
| 最近记录: |