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

Java 如何在Robolectric中模拟按下后退按钮?,java,android,robolectric,instrumentation,Java,Android,Robolectric,Instrumentation,有没有一个简单的方法来模拟按下机器人的后退按钮 以下测试失败: @Test public void testBackButtonClosesActivity() throws Exception { ShadowActivity activityShadow = Shadows.shadowOf(activity); activity.onKeyDown(KeyEvent.KEYCODE_BACK, new KeyEvent(0, 0, KeyEvent.ACTION_DOWN,

有没有一个简单的方法来模拟按下机器人的后退按钮

以下测试失败:

@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());
}
然而,这是成功的:

@Test
public void testBackButtonClosesActivity() throws Exception {
    ShadowActivity activityShadow = Shadows.shadowOf(activity);
    activity.onBackPressed();
    assertTrue(activityShadow.isFinishing());
}
这是在我的活动中覆盖
onKeyDown()

当myCondition为真时进行测试,在另一个测试中使用activity.onKeyDown(KeyEvent.KEYCODE返回,new KeyEvent(0,0,KeyEvent.ACTION返回,KeyEvent.KEYCODE返回,0))触发
Dostuf()

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

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

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

你能解释一下为什么onBackPressed是不够的吗?为什么您需要准确地处理back按钮键?我已经开始使用onBackPressed()。我使用的原始代码使用了onKeyDown(),我不想进行不必要的重构。我需要在按back键后调用
onPause()
。正在运行的应用程序将事件从
onBackPressed()
传播到
onPause()
,但在Robolectric中,调用
onBackPressed()
不会调用
onPause()
。您找到解决方案了吗,还是我必须手动调用ActivityController.pause()?如果您的逻辑在
onBackPressed()
中更改了某些内容,然后在调用
onPause()
时基于该数据发生了一些事情,那么您可以调用
onBackPressed()
,然后再调用
onPause()
。最好有两个测试:一个测试
onBackPressed()
和一个测试
onPause()
。您还可以使用robolectric,它应该调用
onPause()
,就像在实际应用程序中一样。如果您仍然有困难,我建议您创建一个关于堆栈溢出的新问题并发布代码。
    Intent intent = new Intent(ShadowApplication.getInstance().getApplicationContext(), MyActivity.class);
    activity = Robolectric.buildActivity(MyActivity.class).withIntent(intent).create().visible().get();