如何在 Robolectric 中模拟按下后退按钮?

TTr*_*mit 5 java instrumentation android robolectric

是否有一种简单的方法可以模拟在 Robolectric 中按下后退按钮?

以下测试失败:

@Test
public void testBackButtonClosesActivity() throws Exception {
    ShadowActivity activityShadow = Shadows.shadowOf(activity);
    activity.onKeyDown(KeyEvent.KEYCODE_BACK, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK, 0));
    assertTrue(activityShadow.isFinishing());
}
Run Code Online (Sandbox Code Playgroud)

但是,这成功了:

@Test
public void testBackButtonClosesActivity() throws Exception {
    ShadowActivity activityShadow = Shadows.shadowOf(activity);
    activity.onBackPressed();
    assertTrue(activityShadow.isFinishing());
}
Run Code Online (Sandbox Code Playgroud)

这是我要覆盖的活动onKeyDown()

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK & myCondition) {
        doStuff();

        return true;
    } else {
        return super.onKeyDown(keyCode, event);
    }
}
Run Code Online (Sandbox Code Playgroud)

测试的时候myCondition是真实的触发器doStuff()使用另一个测试activity.onKeyDown(KeyEvent.KEYCODE_BACK, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK, 0));

活动是使用以下方法创建的:

    Intent intent = new Intent(ShadowApplication.getInstance().getApplicationContext(), MyActivity.class);
    activity = Robolectric.buildActivity(MyActivity.class).withIntent(intent).create().visible().get();
Run Code Online (Sandbox Code Playgroud)

我应该指出,当 myCondition 为 false 时按下应用程序中的后退按钮会导致活动关闭。