如何使用MockK测试jdbctemplate插入?

问题描述

我正在尝试使用MockK而不是Mockito来实现以下相同的功能。我无法在JDBC模板update()方法中模拟lambda函数。

class Repository(private val jdbcTemplate: JdbcTemplate) {
createRule(emp: Employee): Int? {
        val insertRuleQuery: String = getAddEmployeeSqlString()

            val holder: KeyHolder = GeneratedKeyHolder()

            val row:  Int = jdbcTemplate.update({ connection: Connection ->
                val ps = connection.prepareStatement(insertRuleQuery,arrayOf("EMP_ID"))
                ps.setLong(1,emp.batchId)
                ps.setString(2,emp.permanent)
                ps.setString(3,emp.groupId)
                ps

            },holder)
            return row
}

class RepositoryTest {

 private val mockJT = Mockito.mock(JdbcTemplate::class.java)
 
 fun `jdbc test emp insert`() {
 
  
        Mockito.`when`(
            mockJT.update(
                Mockito.any(PreparedStatementCreator::class.java),Mockito.any(
                    KeyHolder::class.java
                )
            )
        ).thenReturn(1)
          assertEquals(count,1)

}

解决方法

any()可以模拟兰巴舞

    val jdbcMock = mockk<JdbcTemplate>()

    every { jdbcMock.update(any<PreparedStatementCreator>(),any<KeyHolder>()) } returns  10

    val repo = Repository(jdbcMock)

    assertEquals(repo.createRule() == 10)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...