我对使用 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。 请帮我解决这个案例。谢谢
答案 0 :(得分:0)
问题是,SparseArray 是 Android 的一部分,而不是 Java 的一部分。在单元测试中,您只能使用普通的旧 Java 对象,而不能使用 android 类或依赖项(例如来自包 android.util)。
因此,您必须在测试中模拟 SparseArray。
例如你可以使用 Mockito:
private var map: SparseArray<Char> = SparseArray()
map = mock()
不幸的是,您无法将模拟的稀疏数组传递给您的对象。 所以你不能像这样测试你的具体例子。
如果您想测试具有平台依赖性的类,另一种解决方案是使用 Robolectric 框架。 http://robolectric.org/