その他
    ホーム 技術発信 DoRuby Android UnitTest

    Android UnitTest

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    Androidアプリのテストコードを書いてみました。
    今回は画面遷移に関するテストコードです。
    

    事前にunitテストの環境を準備する必要があります。

    下記などを参考にさせて頂きました。

    http://www.yaunix.com/2011/01/08/android%E3%81%A7%E3%81%AEunittest%E3%81%AE%E5%A7%8B%E3%82%81%E6%96%B9/ (410 Gone)

     Activityコード

    public class MainActivity extends Activity {
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            LinearLayout contentView = getContentView();
            setContentView(contentView);
        }
        
        private LinearLayout getContentView() {
            LinearLayout l = new LinearLayout(this);
            Button button = new Button(this);
            button.setText("ターゲットへ遷移するボタン");
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.setClassName(getApplicationContext(), TargetActivity.class.getName());
                    startActivity(intent);
                }
            });
            l.addView(button);
            return l;
        }
    
    }
    

     テストコード

    /**
     * 
     * ActivityInstrumentationTestCase2を継承したクラスを作成する 
    * テストするクラスを指定する(MainActivity) * */ public class MainActivityTest extends ActivityInstrumentationTestCase2<mainactivity> { /** * 次の画面へ遷移するためのボタン */ private Button button; /** * コンストラクタ * テストするクラスを指定する(MainActivity) */ public MainActivityTest() { super("MainActivityTest",MainActivity.class); } /** * テスト前の準備 */ @Override protected void setUp() throws Exception { super.setUp(); /** * Buttonを取得しておく */ button = (Button) getActivity().findViewById(1); } public void testOnClick() { getActivity().runOnUiThread(new Runnable() { @Override public void run() { /** * 遷移先のクラスをMonitorにセットする */ ActivityMonitor monitor = new ActivityMonitor(TargetActivity.class.getName(), null, true); getInstrumentation().addMonitor(monitor); /** * Buttonをクリックする * (押せることもテストしておく) */ assertTrue(button.performClick()); /** * 画面遷移したあとのクラスを取得する */ Activity next = getInstrumentation().waitForMonitorWithTimeout(monitor, 10); /** * Monitorでセットしたクラスと画面遷移したクラスが同じことを検証する */ assertEquals(monitor.getHits(), 1); if ( next != null ) { /** *遷移した画面を閉じる */ next.finish(); } } }); } }

    次は画面遷移以外のテストコードも投稿できればと思ってます。

    参考になれば幸いです。

    記事を共有