laz*_*exe 4 java tdd android unit-testing robolectric
我需要使用Robolectric在Android应用程序中编写测试菜单.
菜单源代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case R.id.exit:
this.finish();
break;
default:
Toast.makeText(this, getString(R.string.errMsg), Toast.LENGTH_SHORT).show();
break;
}
return super.onMenuItemSelected(featureId, item);
}
Run Code Online (Sandbox Code Playgroud)
请帮忙写测试
以下示例应该是任何开始使用Robolectric的人的一个很好的例子.它在AndroidStudio下使用Robolectric 3.0.
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 19)
public class MainActivityTest {
@Test
public void shouldCloseActivity() {
MainActivity activity = Robolectric.setupActivity(MainActivity.class);
MenuItem menuItem = new RoboMenuItem(R.id.exit);
activity.onOptionsItemSelected(menuItem);
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
assertTrue(shadowActivity.isFinishing());
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
实际上,应尽可能避免使用RoboMenuItem。您可以通过robolectric创建活动并将其显示出来,从而获得该活动创建的实际菜单。
MainActivity activity = Robolectric.buildActivity(MainActivity.class).create().visible().get();
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用ShadowActivity获取实际创建的菜单选项。
shadowOf(activity).getOptionsMenu()
Run Code Online (Sandbox Code Playgroud)
要获取实际的MenuItem:
shadowOf(activity).getOptionsMenu().findMenuItem(...)
Run Code Online (Sandbox Code Playgroud)
然后,您可以将该实际的menuItem传递给onOptionsItemSelected。
RoboMenuItem只是一个虚拟外观,实际上,robolectric开发人员建议尽可能避免它。