【发布时间】:2016-11-10 18:33:21
【问题描述】:
我正在使用 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
我的数据库使用DriverManagerDataSource 连接存储在/src/main/java/application/persistence/DbConfig.java 中。我已经设置ApplicationRunner 在启动时向数据库添加几行。
编辑:
我还应该补充一点,这些是我在 JUnit 测试文件中使用的注释:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes={
AdeyTrackApplication.class,
SecurityConfig.class,
WebConfig.class,
AuthorizationController.class
})
【问题讨论】:
-
第一种方法是在您的测试类中以
setUp方法初始化数据库。另一种方法是创建测试配置,在其中添加@PostConstruct函数,该函数初始化数据库中的数据并将此类添加到ContextConfiguration。 -
@krynio 有没有实现的例子?我对 Spring 不是很有经验,关于 JUnit 也没有遇到过这个注释。
-
最简单的方法是将 JdbcTemplate 注入你的测试类。接下来您可以使用
jdbcTemplate.execue(sql)执行sql 查询。要在每次测试之前运行此代码,您应该创建带有注释@Before的setUp方法。下面是如何注入 JdbcTemplate 和执行查询的示例:github.com/spring-projects/spring-boot/blob/master/… 和这里是使用@Before的示例 junit.sourceforge.net/javadoc/org/junit/Before.html
标签: java mysql spring hibernate spring-boot