【发布时间】:2019-01-14 15:02:31
【问题描述】:
我正在我的代码中测试一个调用 Activity.requestPermissions() 的方法。我想使用 Robolectric 阴影功能,所以我使用 Robolectric 创建了 Activity
val mockActivity = Robolectric.setupActivity(AppCompatActivity::class.java)
但我希望阴影活动触发 requestPermissions() 调用的通用答案。
如果可以使用 Robolectric-shadowed Activity 作为 Mockito 的模拟,我可以这样做:
@Test
fun testRequestPermissions()
{
val myCallback = MyCallback()
val mockActivity = Robolectric.setupActivity(AppCompatActivity::class.java)
val shadowActivity = shadowOf(mockActivity)
shadowActivity.grantPermissions(Manifest.permission.RECORD_AUDIO)
`when`(
mockActivity.requestPermissions(
eq(arrayOf(Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_FINE_LOCATION)), anyInt())).then {
myCallback.notify(
arrayOf(Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_FINE_LOCATION), intArrayOf(
PERMISSION_GRANTED, PERMISSION_GRANTED))
...
}
}
class MyCallback
{
fun notify(arrayOf: Array<String>, intArrayOf: IntArray){...}
}
但是不可能在 Robolectric Activity 上使用 Mockito 存根方法。 Robolectric 是否提供类似方法存根的功能?
不幸的是,我不能在这里使用任何自定义阴影。我试过这样做:
@Implements(AppCompatActivity::class)
class ShadowAppCompatActivity() : ShadowActivity()
{
@Implementation
override fun requestPermissions(permissions: Array<out String>, requestCode: Int)
{
super.requestPermissions(permissions, requestCode)
myCallback.notify(permissions, requestCode)
}
}
但 requestPermissions() 在 ShadowActivity 中是最终的。
【问题讨论】:
标签: android mockito robolectric stubbing