#kotlin #testing #mockk #kotlin-exposed
#kotlin #тестирование #mockk #kotlin-открытый
Вопрос:
В настоящее время я пытаюсь протестировать свой открытый код Kotlin. У меня есть таблица, следующая форме
object Foo: Table() {
*parameters*
}
и метод, который выглядит примерно так
fun addNewFoo(){
Foo.insert { ... }
}
Я тестирую addNewFoo
и хочу проверить, произошла ли вставка, в идеале используя что-то вроде
verify { FooSpy.insert { ... } }
Как мне смоделировать таблицу Foo как шпионскую, чтобы я мог проверить, произошел ли вызов, или какой другой подход я должен предпринять, чтобы проверить, вызывается ли этот метод?
Ответ №1:
Вы можете сначала смоделировать свой одноэлементный Foo
класс, используя mockkObject()
, а затем проверить. Вот код:
mockkObject(Foo) // mock the object
addNewFoo() // call function that we're testing
verify { Foo.insert(any()) } // verify
Комментарии:
1. Спасибо! Обычно это отлично работает, но, к сожалению, поскольку
Foo
это открытая таблица, у нее есть некоторые странные свойства, и это не работает. Онinsert
должен находиться внутри транзакции, что затрудняет тестирование
Ответ №2:
Обсуждаются способы решения этой проблемы: https://github.com/JetBrains/Exposed/issues/317
Похоже, что реального способа тестирования не существует, но создание небольших тестовых таблиц в базе тестовых данных — это самое близкое, что вы можете получить.