簡體   English   中英

HikariCP - 如何為單元測試配置模擬數據源

[英]HikariCP - how to configure a mock datasource for unit tests

我有某種集成測試可以啟動我的服務,但不進行實際的數據庫調用。

我得到這樣的例外:

[      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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM