java - HikariCP - 如何为单元测试配置模拟数据源
问题描述
我有某种集成测试可以启动我的服务但不进行实际的数据库调用。
我得到这样的例外:
[ main] 11:04:47,368 ERROR HikariPool:566 - HikariPool-1 -
Exception during pool initialization.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
这对我的测试来说没问题(它正在通过)。但是,我不希望在日志中出现该错误,这会使开发人员在测试失败时感到困惑。
我正在使用弹簧配置。我可以配置某种模拟数据源吗?
解决方案
为此,我正在使用 kotlin、spring boot 和 io.mockk:mockk。在您的集成测试中,您可以通过将其放在顶部来指定上下文配置
@ContextConfiguration(classes = [DBConfiguration::class])
上面描述的类是您模拟的数据库连接所在的位置。
你的DBConfiguration
课看起来像这样
import com.zaxxer.hikari.HikariDataSource
import io.mockk.every
import io.mockk.mockk
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Primary
import java.sql.Connection
import java.sql.DatabaseMetaData
/**
* Custom configuration class used for testing and disables database connection and initial connection verification
*/
class DBConfiguration {
@Primary
@Bean
fun hikariDataSource(): HikariDataSource {
val connection: Connection = mockk()
val databaseMetadata: DatabaseMetaData = mockk()
val hikariDataSource: HikariDataSource = mockk()
hikariDataSource
every { hikariDataSource.connection }.returns(connection)
every { hikariDataSource.connectionTestQuery }.returns("yeet")
every { hikariDataSource.metricRegistry }.returns(Any())
every { hikariDataSource.maximumPoolSize }.returns(2)
every { hikariDataSource.minimumIdle }.returns(2)
every { connection.metaData }.returns(databaseMetadata)
return hikariDataSource
}
}
推荐阅读
- c++ - 为什么在另一个 ctor 中调用 ctor 时出现问题?
- flutter - 如何将 GeoJSON 解析为 Dart/Flutter 中的类型
- sql - 用于缩小行的简单 SQL 语句
- asp.net - 如何在 asp.net 网站中调用 asyn webmethod
- python - 可以使用串联定义实例的变量名吗?
- php - 表单提交后 POST 方法返回 404 - Laravel
- flutter - Flutter:如何将经度和纬度转换为加码(打开位置码),反之亦然
- typescript - React Konva 的 `use-image` 库引发 TypeScript 错误
- reactjs - 如何使用谷歌地图 api 获取当前位置?
- php - 如何通过 PDO 打印 drop table 结果