我第一次使用 Android Studio 3.2 实现 AndroidInstrumentationTest,尝试检查方法是否根据字符串从属性(R.attr 和样式中设置的颜色)返回颜色资源 ID,但返回的资源 ID 始终为 0 而不是预期的。
代码在我的应用程序中正常工作,颜色设置如下:
textView.setTextColor(fetchCorrectColor(myContext))
问题是测试中的 fetchColor 返回 0
mContext.getString() 等其他资源完美运行
测试类用 @RunWith(AndroidJunit4::class) 注释并在模拟的 Android Pie (28) 和设备上运行
我尝试了不同的上下文,结果相同:
InstrumentationRegistry.getInstrumentation().targetContext
InstrumentationRegistry.getInstrumentation().context
ApplicationProvider.getApplicationContext()
测试方法
fun getTextColor(status: String?, mContext: Context): Int{
return when(status){
"A", "B" ->{
fetchCorrectColor(mContext)
}
"C", "D"->{
fetchWarningColor(mContext)
}
else -> {
fetchDisabledColor(mContext)
}
}
}
从属性中获取颜色资源的方法
fun fetchCorrectColor(context: Context): Int{
return fetchColor(context, R.attr.correct)
}
private fun fetchColor(context: Context, colorId: Int): Int{
val typedValue = TypedValue()
context.theme.resolveAttribute(colorId, typedValue, true)
return typedValue.data
}
测试
@Test fun getTextColor_isCorrect(){
Assert.assertEquals(R.attr.correct, getTextColor("A", mContext))
Assert.assertEquals(R.attr.correct, getTextColor("B", mContext))
Assert.assertEquals(R.attr.warning, getTextColor("C", mContext))
Assert.assertEquals(R.attr.warning, getTextColor("D", mContext))
Assert.assertEquals(R.attr.disabled, getTextColor(null, mContext))
}
这是我一直遇到的错误:
java.lang.AssertionError: expected:<2130968760> but was:<0>
at org.junit.Assert.fail(Assert.java:88)