Android、Java、Web系、Linux、マラソン等の備忘録

2013/01/11

JUnitからMenuItemをクリックする方法

0 件のコメント
ActivityInstrumentationTestCase2を継承したクラスのテストメソッドで確認しました。

getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
getInstrumentation().invokeMenuActionSync(activity, net.takaiwa.R.id.menu_setting, 0);

invokeMenuActionSyncのパラメータは、
第一引数 対象Activity
第二引数 メニューアイテムのID
xmlに定義したもの?
第三引数 なんかフラグ

XMLではなく動的に追加したメニューの場合は、MenuItemをgetDeclaredFieldなり何らかの形で取得して、getItemIdで第二引数のIDを取得できます。以下、
        Class c = mActivity.getClass();
        Field field = c.getDeclaredField("mMenuItemHoge");
        MenuItem menu_item = field.get(mActivity);
        getInstrumentation().invokeMenuActionSync(mActivity, menu_item.getItemId(), 0);

コンパイル通してないですけど、こんな感じですかね。MenuItemはactivityからたどれそうな気もしますけど。



ちなみに、メニューとは関係なく、Viewとして取得できれば、view.performClick();として実行できます。ただし、JUnitからのViewの操作は、
        mActivity.runOnUiThread( new Runnable() {
            @Override
            public void run() {
             view.performClick();
            }
        });
        // 待機する
        getInstrumentation().waitForIdleSync();
のように書いた方がいいかもしれません。

0 件のコメント :

コメントを投稿