运行单元测试时,Android SparseArray 为空

时间:2021-03-09 03:22:27

标签: android unit-testing null

我对使用 SparseArray 的 kotlin 对象进行了单元测试。 测试总是失败,因为尽管 SparseArray 是初始化的,但它始终为 null。

object Exam : KoinComponent {
var map = SparseArray<Char?>()
        init {
            map.put(0, 'a')
            map.put(1, 'b')
            map.put(2, 'c')
            map.put(3, 'd')
        }

fun getChar(key: Int): Char? {
    Log.d(KOIN_TAG, "" + map.get(key))
    return map.get(key)
}


class ExamTest : KoinTest {
    @Test
    fun getCharTest(){
        assertEquals(Exam.getChar(0), 'a')
    }
}

我调试了这个测试,它运行了 Array 的 init,但该值始终为 null。 请帮我解决这个案例。谢谢

1 个答案:

答案 0 :(得分:0)

问题是,SparseArray 是 Android 的一部分,而不是 Java 的一部分。在单元测试中,您只能使用普通的旧 Java 对象,而不能使用 android 类或依赖项(例如来自包 android.util)。

因此,您必须在测试中模拟 SparseArray。

例如你可以使用 Mockito:

private var map: SparseArray<Char> = SparseArray()
map = mock()

不幸的是,您无法将模拟的稀疏数组传递给您的对象。 所以你不能像这样测试你的具体例子。

如果您想测试具有平台依赖性的类,另一种解决方案是使用 Robolectric 框架http://robolectric.org/

相关问题