我正在尝试为我的Java 11,spring Boot + eclipselink + postgresql应用程序设置一个集成测试框架。我每次都使用docker-maven-plugin来派生一个新的postgresql DB容器,并且使用maven-failsafe-plugin运行集成测试。除了DB模式初始化之外,这种方法都很好:我无法初始化那个模式。
下面是我的application-it.yaml的样子:
# Graceful shutdown delay
application:
shutdownhook:
delay-msec: 500
# Spring Boot management endpoint configuration
management:
port: 9199
info:
git:
mode: full
# Spring Boot enpoints Management endpoint
endpoints:
metrics:
sensitive: false
env:
sensitive: false
health:
enabled: false
# short value just for testing
estaGracefulShutdownWaitSeconds: 5
# Application-specific configuration
sample-application:
server-name: Sample App Under Test
logging:
config: classpath:log4j2-spring.xml
spring:
datasource:
platform: postgresql
url: jdbc:postgresql://localhost:${it-database.port}/postgres
username: postgres
password: postgres
schema: classpath:schema-it.sql
data: classpath:data-it.sql
driver-class-name: org.postgresql.Driver
initialization-mode: always
schema-it.sql和data-it.sql可以在类路径中使用。在IT运行期间,没有报告有关其执行的错误。但是模式仍然没有被创建(我知道,因为首先IT测试失败,抱怨任务表丢失,我能够访问测试数据库,我可以看到那里没有创建表)。
单元测试看起来像这样:
@RunWith(SpringRunner.class)
@ActiveProfiles("it")
@SpringBootTest
public class TaskRepositoryIT {
@Autowired
private TaskRepository taskRepository;
@Test
public void testGetTasks() {
List<Task> tasks = taskRepository.findAll();
Assert.assertTrue(tasks.isEmpty());
}
}
有没有办法让spring基于schema-it.sql内容生成schema,然后用data-it.sql数据填充它?
谢谢
2条答案
按热度按时间6g8kf2rb1#
尝试使用
@Sql
注解,它提供了在执行测试时从.sql文件填充数据库的方法。你应该像下面的代码片段那样使用它:5n0oy7gb2#
找到我的问题了问题在于.sql文件名。
正确的名字应该是:
因为platform设置为postgresql。