プログラムで向きを変更したい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());
}
}
アクティビティのレイアウトは別のフォルダー、layout-port および layout-land にあります。
- レイアウトポート
- fragment_main.xml
- レイアウトランド
- fragment_main.xml
横向きモードでは、レイアウトには 2 つのフラグメント (詳細とリスト) が含まれ、縦向きモードでは 1 つ (リストのみ) が含まれます。
テストが開始される前に、デバイス/エミュレーターが既に横向きモードになっている場合、このテストは成功します。縦向きの場合、mListFragment と mDetailFragment で NullPointerException で失敗します。
遅延 (waitForIdleSync() および/または waitForActivity()) を追加しても、問題は解決しないようです。
findFragmentById() を使用してフラグメントを見つけながら、テストで方向を強制的に横向きにするにはどうすればよいですか?