有一种情况,我想使用一个数据库映像来集成测试我的服务层。下面是我开发的代码来设置我的Postgres容器映像:
@SpringBootTest(classes = EventhandlerApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public abstract class BaseIT {
public static final PostgreSQLContainer<?> postgresDB = new PostgreSQLContainer<>
("postgres:12-alpine")
.withDatabaseName("test-db")
.withUsername("postgres")
.withPassword("password");
static {
postgresDB.start();
}
@DynamicPropertySource
public static void properties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", postgresDB::getJdbcUrl);
registry.add("spring.datasource.username", postgresDB::getUsername);
registry.add("spring.datasource.password", postgresDB::getPassword);
}
}
现在我想使用测试数据库来调用我的服务层方法并检查结果,下面是我的集成测试示例:
public class SampleServiceTesting extends BaseIT {
@Autowired
private SampleService sampleService;
@Test
@Transactional
void testIntegrationFlow() {
SampleService.exampleMethod();
}
}
但当我运行测试时,它返回以下错误:
org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
型
我如何才能解决这个问题上运行我的测试请?
1条答案
按热度按时间qpgpyjmq1#
你问的
使用PostgreSQL容器在测试容器中体验HibernateException
问题在于没有通过连接池到数据库的活动连接,这也可能导致
PostgreSQLContainer
的配置错误和错误注入,因为Hibernate可以自动确定要使用的正确方言,为此,它需要到数据库的活动连接。一种做法是使用ApplicationContextInitializer接口而不是
@DynamicPropertySource
以编程方式初始化应用程序上下文。例如,注册数据源或根据上下文环境激活概要文件。一种做法如下所示。