Стереть внутренний статус объекта в тесте
Наличие объекта
object MyObject { lateinit var first: String lateinit var second: String fun setVariables(first: String, second: String) { this.first = first this.second = second } }
и потребительский класс:
class Consumer(private val status: MyObject) { fun getString(): String { checkStatusInizialization() return "$first $second" } private fun checkStatusInizialization() { try { status.first status.second } catch (e: UninitializedPropertyAccessException) { throw MissingInitializationException() } } }
и класс тестирования, например:
- Intellij Без тестов найдено Kotlin
- SpringBoot ArrayIndexOutOfBoundsException MethodParameter.getGenericParameterType
- Файл класса Kotlin не может работать в IntelliJ для JUnit
- Экспериментальная поддержка JUnit в Android + Kotlin не работает
- Тестирование JUnit с помощью студии KOTLIN android
class ConsumerTest { @Test(expected = MissingInitializationException::class) fun `MissingInitializationException when MyObject not initialized`() { Consumer(EventsConfigurationsStatus).getString() } @Test fun `get string`() { MyObject.setVariables("hello", "world!") Consumer(EventsConfigurationsStatus).getString() } }
Тестирование проходит индивидуально, но выполняется их совместное MissingInitializationException when MyObject not initialized
потому что у MyObject
есть допустимое состояние (установлено в get string
test).
Как я могу получить объект с пустым состоянием в начале каждого теста?
- Запуск тестов юнита, написанных в Котлине с аннотацией @category
- Android w / Kotlin pure-java-Junit NoClassDefFoundError обходной путь не работает
- Как скомпилировать тестовый код модуля Kotlin, который использует hamcrest 'is'
- Использование kotlin с jmockit
- ClassCastException с использованием метода bindService ServiceTestRule
- Как назвать assertEquals с Double Epsilon / Precision в Котлине?
- Выполнение инициализатора свойств kotlin в тестах JUnit
- Kotlin для assertThat (foo, instanceOf (Bar.class))
Ну, вот о чем идет речь – они созданы один раз, а затем сохраняют свое состояние до тех пор, пока приложение не будет убито.
Я бы повернул проблему по-другому. Вместо этого вы можете превратить MyObject
в class
и создать новый экземпляр этого метода в каждом методе тестирования – таким образом вы будете уверены, что MyObject
(лучше переименовать его для большей ясности) имеет новое состояние всякий раз (и какой бы ни был) метод тестирования запускается.
В производственном коде вы можете превратить экземпляр MyObject
в эффективный синглтон, сохранив его в companion object
/ object
– в зависимости от того, что вам подходит.