问题描述
我正在尝试使用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)