Spring Boot单元测试的数据库查询计数方法
如何在Spring Boot应用中实现数据库请求数量的计数方法,并在单元测试中实现它。
我已经在项目中把generate_statistics=true设置好了,但我不确定如何使用它。我在测试时不得不仔细分析org.hibernate.SQL: DEBUG和 type.descriptor.sql.BasicBinder: TRACE会向我展示什么。
我在Baeldung的示例中看到了 assertSelectCount 方法,但我不知道如何进行配置。没有它,我只能浏览 i.StatisticalLoggingSessionEventListener: Session Metrics
解决方案
如果你更喜欢原生解决方案,不想在你的 pom.xml 中添加外部的第三方依赖,也可以通过在Spring Boot的测试配置中直接启用Hibernate Statistics,并以编程方式检查指标来实现。
- 首先,在你的
src/test/resources/application.properties(或YAML文件)中启用统计信息:
spring.jpa.properties.hibernate.generate_statistics=true
2.然后,将 EntityManagerFactory 注入到你的集成测试中,以在测试方法内部手动清除并断言查询计数:
@SpringBootTest
public class DatabaseQueryCountTest {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Autowired
private UserRepository userRepository;
private org.hibernate.stat.Statistics hibernateStatistics;
@BeforeEach
public void setUp() {
// Get the underlying Hibernate SessionFactory statistics
SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
this.hibernateStatistics = sessionFactory.getStatistics();
this.hibernateStatistics.clear(); // Reset metrics before each test
}
@Test
public void testSelectQueryCount() {
// Trigger your repository method
userRepository.findById(1L);
// Assert the specific statement execution count
long selectCount = hibernateStatistics.getPrepareStatementCount();
Assertions.assertEquals(1, selectCount, "Expected exactly 1 database query statement execution");
}
}
这种方法让你直接从Hibernate Session框架获得对准备语句计数、连接数以及二级缓存指标的原生控制,而无需覆盖数据源配置。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。