简体   繁体   中英

HikariCP - how to configure a mock datasource for unit tests

I have some sort of integration test that starts my service but do not do actual DB calls.

I am getting such exceptions:

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

Which is ok for my test (it is passing). However, I would like not to have that error in the log, it makes developers confuse when the test fails.
I am using spring configuration. Is there some kind of mock datasource that I can configure?

I am using kotlin, spring boot, and io.mockk:mockk for this. In your integration test, you specify context configuration by placing this at the top

@ContextConfiguration(classes = [DBConfiguration::class])

Where the class described above is where your mocked DB connection is.

Your DBConfiguration class would look like this

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM