Grails 3.3.1单元测试中如何查看SQL日志?
在Grails 3.3.1测试中查看SQL日志
要在Grails 3.3.1的测试环境下查看SQL日志,需要针对测试场景调整数据源和日志配置,同时注意单元测试与集成测试的差异,下面是具体的操作步骤:
1. 调整application.yml的测试环境配置
确保测试环境明确开启SQL日志记录和SQL格式化,避免全局配置可能带来的环境冲突:
hibernate: format_sql: true # 全局默认开启SQL格式化(可选) test: dataSource: logSql: true # 强制开启测试数据源的SQL日志输出 hibernate: format_sql: true # 单独为测试环境配置SQL格式化,优先级高于全局 development: dataSource: logSql: true
2. 配置logback.groovy输出Hibernate细节日志
让Hibernate的SQL语句和参数绑定信息输出到控制台,方便调试:
// 输出完整的SQL语句 logger 'org.hibernate.SQL', TRACE, ['STDOUT'] // 输出SQL语句中的参数绑定值(能看到具体传入的参数,非常实用) logger 'org.hibernate.type.descriptor.sql.BasicBinder', TRACE, ['STDOUT'] // 可选:如果需要抑制Hibernate的其他冗余日志,可以添加 // logger 'org.hibernate', INFO, ['STDOUT']
3. 注意单元测试与集成测试的核心差异
- 纯单元测试:如果你的测试使用
@TestFor注解且未加载完整应用上下文,GORM会使用内存模拟实现,不会执行真实的SQL语句,自然也看不到SQL日志。这种情况下,你需要:- 将测试文件移到
src/integration-test目录下(集成测试默认会启动完整应用上下文) - 或者在测试类上添加
@Integration注解,强制加载应用上下文,使用真实数据源执行SQL
- 将测试文件移到
验证配置效果
启动测试后,你应该能在控制台看到类似这样的输出:
Hibernate: select this_.id as id1_0_0_, this_.username as username2_0_0_ from user this_ where this_.id=? binding parameter [1] as [BIGINT] - 123
内容的提问来源于stack exchange,提问作者Tabbycat
相关产品推荐
相关产品推荐

