是否可以保留已经存在的接口实现?

时间:2018-04-23 18:15:28

标签: kotlin mockk

我有这样的界面:

interface Database {
    fun insertItems(items: List<ItemData>)
    fun deleteItems(items: List<ItemData>)
    fun runTransaction(alsoDelete: Boolean) {
        insertItems(listOf(ItemData(id = 1), ItemData(id = 2), ItemData(id = 3)))
        if (alsoDelete)
            deleteItems(listOf(ItemData(id = 4), ItemData(id = 5), ItemData(id = 6)))
    }
}

我想使用mockk创建Database的实例,但我只想模拟抽象方法,同时保留runTransaction,它确实有我想要测试的实现。结果是我可以这样验证:

runTransaction(alsoDelete = true)
verify { insertItems(listOf(ItemData(id = 1), ItemData(id = 2), ItemData(id = 3))) }   

有可能用mockk来实现吗?

1 个答案:

答案 0 :(得分:1)

类似的东西应该有效:

val x = mockk<Database>()

every { x.runTransaction(any()) } answers { callOriginal() }

x.runTransaction(alsoDelete = true)

verify { x.insertItems(listOf(ItemData(id = 1), ItemData(id = 2), ItemData(id = 3))) }

但事实并非如此。我添加了一张票here