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();