Android 数据 class 单元测试

Android data class unit test

我下面有一个数据class -

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

您的断言正在检查未更改的 myViewState 的值。

copy 的结果存储在一个新对象中并对其进行测试。

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

问题是您正在测试旧对象,而不是复制的对象。

改为这样做:

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

您正在检查原始对象中的值。使用这个:

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

另请注意,您的期望值应该是 assertEquals()

的第一个参数