Android модульный тест класса данных - PullRequest
0 голосов
/ 18 марта 2020

У меня есть класс данных ниже -

data class MyViewState(
    val loading: Boolean = false,
    val data: String? = null,
    val error: String? = null
)

У меня есть простой тест JUnit4 -

@Test
fun testLoading() {
    val myViewState = MyViewState()
    myViewState.copy(loading = true)
    assertEquals(myViewState.loading, true)
}

Тест не пройден. Дает мне -

java.lang.AssertionError: 
Expected :false
Actual   :true

Ответы [ 3 ]

2 голосов
/ 18 марта 2020

Вы проверяете значение в исходном объекте. Используйте это:

@Test
fun testLoading() {
    val myViewState = MyViewState()
    val myViewStateCopy = myViewState.copy(loading = true)
    assertEquals(true, myViewStateCopy.loading)
}

Также обратите внимание, что ожидаемое значение должно быть первым параметром для assertEquals()

1 голос
/ 18 марта 2020

Проблема в том, что вы тестируете старый, а не скопированный объект.

Сделайте это вместо:

@Test
fun testLoading() {
    val myViewState = MyViewState()
    val myViewStateCopy = myViewState.copy(loading = true)
    assertEquals(true, myViewStateCopy.loading)
}
1 голос
/ 18 марта 2020

Ваш assert проверяет значение myViewState, которое не изменилось.

Сохранить результат copy в новом объекте и проверить его.

@Test
fun testLoading() {
    val myViewState = MyViewState()
    val myNewViewState = myViewState.copy(loading = true)
    assertEquals(myNewViewState.loading, true)
}
...