Тестирование класса с помощью издевательского геттера - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь проверить класс, который как два свойства с геттерами, где один геттер вызывает статический метод. Я хочу смоделировать геттер статическим методом для проверки логики синтаксического анализа другого геттера. Проблема в том, что невозможно получить доступ к переменной через геттер и, таким образом, вызвать ложный вызов.

Я искал документацию по kotlin для получения и установки, но не нашел решения.

class ClassToTest() {
    val firstname: String
        get() = this.fullName.split(" ")[0]

    val fullName: String
        get() = SomeService.getFullName()
}
class ClassToTestTest() {
    fun `firstname should return first part of the fullName`() {
        val classToTestMock = mock<ClassToTest>()
        `when`(classToTestMock.fullName).thenReturn("Walter White")
        assertEquals(classToTestMock.firstname, "Walter)
    }
}

Я ожидаю, что "Уолтер" вернется, но вместо этого ClassToTest.firstName обращается к переменной напрямую, а не к поддельному получателю.

Может ли кто-нибудь указать мне правильное направление? : D

Заранее спасибо.

1 Ответ

0 голосов
/ 16 апреля 2019

Насколько я понимаю, вы пытаетесь проверить свои firstname расчетные свойства.Для этого вам нужно сделать свой класс и свойство fullName открытым.

open class ClassToTest() {
    val firstname: String
        get() = this.fullName.split(" ")[0]

    open val fullName: String
        get() = SomeService.getFullName()
}

Mock может работать только с open (не final в Java) объектами.В противном случае он выдаст исключение во время выполнения.

Затем, чтобы настроить тестовый класс, просто вызовите следующее:

`when`(classToTestMock.fullName).thenReturn("Walter White")

PS Я не вижу поля name в вашем классе,поэтому я заменил его на fullName.Если я что-то пропустил, я бы хотел, чтобы вы поняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...