【问题标题】:Android SparseArray is null when running a Unit Test运行单元测试时,Android SparseArray 为空
【发布时间】:2021-06-06 22:56:23
【问题描述】:

我对使用 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')
    }
}

我调试了这个测试,它运行了数组的 init,但值始终为 null。 请帮我解决这个问题。谢谢

【问题讨论】:

  • (第一个代码块中的大括号不平衡,缩进有问题。考虑使用代码围栏(例如~~~,见编辑后备忘面板)。)

标签: android unit-testing null


【解决方案1】:

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

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

例如,您可以使用 Mockito:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2011-04-03
    相关资源
    最近更新 更多