Spyk MockK, как переписать конструктор? - PullRequest
0 голосов
/ 28 июня 2019

В настоящее время я пытаюсь проверить класс как шпионский объект, который обычно инициализирует соединение с базой данных в конструкторе.Упрощенная версия класса выглядит следующим образом.

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

Проблема в том, что мой тест не может быть запущен, потому что я неНе знаю, как перезаписать функцию инициализации, которая может использовать макет соединения вместо инициализации объекта соединения.Спасибо за помощь.

1 Ответ

1 голос
/ 28 июня 2019

Не думаю, что есть способ издеваться над функцией инициации шпиона.

Я предлагаю вам использовать конструктор для передачи экземпляра соединения.

class ClassToTest(val connection: Connection) {
    ...
}

Тогда в вашем тесте очень легко смоделировать соединение.

class TestClass(){
    private val dbh = ClassToTest(mockk())

    @Test
    fun testMethodA() {
       assertEquals(dbh.methodA, 3)
    }
}
...