我有一个 Android 测试项目,我希望以编程方式更改方向。
我的测试:
public class MainActivityLandscapeTest extends ActivityInstrumentationTestCase2<MainActivity> {
public MainActivityLandscapeTest() {
super(MainActivity.class);
}
private MainActivity mActivity;
private Fragment mDetailFragment;
private Fragment mListFragment;
private Solo mSolo;
@Override
protected void setUp() throws Exception {
super.setUp();
mSolo = new Solo(getInstrumentation(), getActivity());
mSolo.setActivityOrientation(Solo.LANDSCAPE);
mActivity = getActivity();
mListFragment = (Fragment) mActivity.getSupportFragmentManager()
.findFragmentById(R.id.listFragment);
mDetailFragment = (Fragment) mActivity.getSupportFragmentManager()
.findFragmentById(R.id.detailFragment);
}
public void testPreConditions() {
assertTrue(mActivity != null);
assertTrue(mSolo != null);
assertTrue(mListFragment != null);
assertTrue(getActivity().getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE);
}
/**
* Only show detailFragment in landscape mode
*/
public void testOrientation() {
assertTrue(mListFragment.isVisible());
assertTrue(mDetailFragment.isVisible());
}
}
活动的布局位于单独的文件夹中,布局端口和布局土地
- 布局端口
- fragment_main.xml
- 布局土地
- fragment_main.xml
在横向模式下,布局包含 2 个片段(详细信息和列表),而在纵向则包含 1 个(仅列表)。
如果设备/模拟器在测试开始之前已经处于横向模式,则此测试通过。如果是纵向的,它会在 mListFragment 和 mDetailFragment 上出现 NullPointerException 失败。
添加延迟(waitForIdleSync()和/或waitForActivity())似乎并没有解决我的问题。
如何在我的测试中强制方向为横向,同时仍然能够使用 findFragmentById() 找到片段?