Можно ли сохранить уже существующие реализации интерфейса?
У меня есть такой интерфейс:
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))) }
Но это не так. Я добавил билет здесь