В настоящее время я пытаюсь протестировать класс как объект-шпион, который обычно инициализирует соединение с базой данных в конструкторе. Упрощенная версия класса выглядит так.
class classToTest(){
val connection:Connection
init {
connection = DatabaseConnection(url = "127.0.0.1")
}
fun methodA():Int{
return 3
}
}
Теперь я пытаюсь проверить методы моего classToTest следующим образом (упрощенно).
class TestClass(){
var connection = mockk<DatabaseConnection>()
var dbh = spyk(ClassToTest())
@Test
fun testMethodA(){
assertEquals(dbh.methodA,3)
}
}
Проблема в том, что мой тест не может начаться, потому что я не знаю, как перезаписать функцию инициализации, которая может использовать макет соединения вместо инициализации объекта соединения. Спасибо за помощь.
Спасибо за быстрый ответ. Не могли бы вы дать мне указатель на внедрение конструктора? Спасибо.





Я не думаю, что есть способ издеваться над функцией инициализации шпиона.
Я предлагаю вам использовать конструктор для передачи экземпляра соединения.
class ClassToTest(val connection: Connection) {
...
}
Тогда в вашем тесте очень легко издеваться над соединением.
class TestClass(){
private val dbh = ClassToTest(mockk())
@Test
fun testMethodA() {
assertEquals(dbh.methodA, 3)
}
}
Вероятно, лучше всего провести рефакторинг, чтобы вы могли использовать внедрение конструктора.