Kotlin: Как проверить это поле неизменным - PullRequest
0 голосов
/ 30 января 2020

У меня есть kotlin класс как

class MyClass {
    val immutableField = "something"
}

Я хочу написать модульный тест, чтобы убедиться, что это поле остается неизменным, что если другой разработчик (случайно) изменит это на var, что некоторые тест не пройден Как я могу это сделать? (Теперь, когда я думаю об этом, я не уверен, как бы я сделал это в Java на поле final)

Это даже не скомпилируется, так что, очевидно, это не будет работать:

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

@Test
fun checkFieldCantBeMuted() {
    val myClass = MyClass()
    myClass.immutableField = "something else"

    // assert field not updated
    assertThat(myClass.immutableField).isEqualTo("something")
}

Теперь я знаю, что вы, возможно, говорите: «Не тестируйте фреймворк и не тестируйте язык», но я не пытаюсь утверждать, что val приводит к неизменности , Я пытаюсь утверждать, что immutableField это val.

1 Ответ

3 голосов
/ 30 января 2020

Вы можете использовать отражение, чтобы получить ссылку KProperty, а затем проверить ее тип:

MyClass::immutableField !is KMutableProperty<*>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...