Я тестирую метод в своем коде, который вызывает Activity.requestPermissions (). Я хочу использовать функции затенения Robolectric, поэтому я создаю Activity с помощью Robolectric, используя
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){...}
}
Но невозможно заглушить методы с помощью Mockito на Robolectric Activity
. Robolectric обеспечивает что-то вроде заглушки метода?
К сожалению, я не могу использовать здесь какую-либо Custom Shadow. Я пытался сделать это:
@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
.