Можно ли сохранить уже существующие реализации интерфейса?

У меня есть такой интерфейс:

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

Я хочу использовать макет для создания экземпляров Database, но я хочу только высмеивать абстрактные методы, сохраняя при этом runTransaction который имеет реализацию, которую я хотел бы проверить. В результате я мог бы проверить это так:

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

Можно ли этого добиться с помощью макета?

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

Но это не так. Я добавил билет здесь

Другие вопросы по тегам