问题描述
我有一个函数,它使用 DisplayMetrics
类的 Resources
的 Context
中的一个字段:
fun getIconForDevice(context: Context,iconUrl: String): String {
val metrics = context.resources.displayMetrics
var suffix = ""
//below checks MUST be in this increasing order or it may failed
if (metrics.densityDpi <= DisplayMetrics.DENSITY_MEDIUM)
suffix = "-m"
else if (metrics.densityDpi <= DisplayMetrics.DENSITY_HIGH)
suffix = "-h"
else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XHIGH)
suffix = "-xh"
else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XXHIGH || metrics.densityDpi > DisplayMetrics.DENSITY_XXHIGH)
suffix = "-xxh"
val pasvand = iconUrl.substring(iconUrl.lastIndexOf("."))
val str = iconUrl.substring(0,iconUrl.lastIndexOf(".")) + suffix + pasvand
return str
}
为了测试它,我需要模拟 Context
和 metrics.densityDpi
给它一个值。
我正在使用 Mockk (1.9.3) 库来做到这一点。
@Test
fun getIconForDevice_ReturnsUrlWithXxhForXxhDisplay() {
val context: Context = mockk(relaxed = true)
every { context.resources.displayMetrics.densityDpi } returns 450
assertEquals(IconHelper.getIconForDevice(context,"https://website.com/image.png"),"https://website.com/image-xxh.png")
}
在给出错误堆栈跟踪后运行测试:
java.lang.ClassCastException: java.lang.Integer cannot be cast to android.util.DisplayMetrics
at ...Resources.getDisplayMetrics(Resources.java)
at ....IconHelper.getIconForDevice(IconHelper.kt:39)
at ...IconHelperTest.getIconForDevice_ReturnsUrlWithXxhForXxhDisplay(IconHelperTest.kt:30)
第一个链接指的是实际函数的val metrics = context.resources.displayMetrics
行
那么如何在 mockk 中模拟这样的嵌套字段?context.resources.displayMetrics.densityDpi
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)