【问题标题】:Is there any stubbing possible on Robolectric Activity?Robolectric Activity 是否有任何存根?
【发布时间】: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


    【解决方案1】:
     ShadowActivity shadowActivity = Shadows.shadowOf(violationsActivity); 
    
    ShadowApplication application = Shadows.shadowOf(fragment.getActivity().getApplication());
    
                String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
    
                application.grantPermissions(permissions);  
         ShadowActivity.PermissionsRequest permissionRequest= shadowActivity.getLastRequestedPermission();
            assertEquals(1,permissionRequest.requestCode);
    

    此代码将帮助我测试 Activitiy.requestPermission(),您也可以使用活动来代替应用程序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-13
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      相关资源
      最近更新 更多