【问题标题】:HikariCP - how to configure a mock datasource for unit testsHikariCP - 如何为单元测试配置模拟数据源
【发布时间】:2018-11-03 09:12:23
【问题描述】:

我有某种集成测试可以启动我的服务,但不执行实际的数据库调用。

我遇到了这样的异常:

[      main] 11:04:47,368 ERROR HikariPool:566 - HikariPool-1 - 
Exception during pool initialization.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

这对我的测试来说是可以的(它通过了)。但是,我不希望在日志中出现该错误,这会使开发人员在测试失败时感到困惑。
我正在使用弹簧配置。我可以配置某种模拟数据源吗?

【问题讨论】:

标签: java spring hikaricp


【解决方案1】:

我为此使用 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
    }
}

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 2018-02-05
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2017-07-03
    相关资源
    最近更新 更多