Android test tutorial

944 views

Published on

「年が明けたのでクロスコミュニティ勉強会」にてプレゼンしました。

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
944
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Android test tutorial

  1. 1. 年が明けたのでクロスコミュニティ勉強会 発表資料 Androidのテストについて (副題: Activity Testing Tutorial をやってみた) http://goo.gl/IR4Vs
  2. 2. 年が明けたのでクロスコミュニティ勉強会 発表資料 まずは 新年の ご挨拶
  3. 3. 年が明けたのでクロスコミュニティ勉強会 発表資料 謹賀新年
  4. 4. 年が明けたのでクロスコミュニティ勉強会 発表資料 ちなみに この資料
  5. 5. 年が明けたのでクロスコミュニティ勉強会 発表資料 Made with http://goo.gl/7BEcE
  6. 6. 年が明けたのでクロスコミュニティ勉強会 発表資料 Activity Testing Tutorial アクティビティ・テストのチュートリアルをやってみました。 詳しくはこちら http://goo.gl/IR4Vs
  7. 7. Activity Testing Tutorial 前提条件
  8. 8. 前提条件 1/4基本的なアプリが作れること※Androidプロジェクトが使える http://goo.gl/IR4Vs
  9. 9. 前提条件 1/4(続き)
  10. 10. 前提条件 2/4多少なりともテストフレームワーク の知識があるhttp://ja.wikipedia.org/wiki/XUnit
  11. 11. 前提条件 2/4(続き)JUnit NUnit MSTest RSpec ... http://goo.gl/Mde5l
  12. 12. 前提条件 3/4 Eclipse と ADT が使える Android Development Tools (ADT) http://goo.gl/eoVnU
  13. 13. 前提条件 3/4(続き) http://goo.gl/eoVnUPortions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  14. 14. 前提条件 4/4(続き) Android 1.5 platform (API Level 3) or higher http://goo.gl/eoVnUPortions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  15. 15. プロジェクトの作成テストの対象とするメインのプロジェクトを作成します。チュートリアルに合わせて"Create project from existing source".サンプルプロジェクトを取り込みます。 http://goo.gl/IR4Vs
  16. 16. サンプルプロジェクトを取り込み
  17. 17. SpinnerとTextView デザイン画面 実行画面
  18. 18. テストプロジェクトを追加Test Target を先ほどのSpinnerActivityにセット
  19. 19. テストプロジェクトのマニフェスト<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.example.spinner.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="3" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.android.example.spinner" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> </application></manifest>Portions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  20. 20. テストプロジェクトのマニフェスト(部分)テストプロジェクトpackage="com.android.example.spinner.test"テスト対象targetPackage="com.android.example.spinner"Portions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  21. 21. Test Case クラスの作成クラス名:SpinnerActivityTestスーパークラス:android.test.ActivityInstrumentationTestCase2<SpinnerActivity>
  22. 22. TestCaseについて Activityを直接操作できます。 ActivityInstrumentationTestCase Added in API level 1 Deprecated since API level 3 http://goo.gl/mVoCD ActivityInstrumentationTestCase2 Added in API level 3 http://goo.gl/gMngMPortions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  23. 23. さらに Android Testの詳細については Testing Fundamentals http://goo.gl/rdIFx
  24. 24. Test Case クラスの作成
  25. 25. エラー発生
  26. 26. 手直しします テスト対象のクラスをインポート import com.android.example.spinner.SpinnerActivity; テストクラスのコンストラクタを追加 public SpinnerActivityTest() { super("com.android.example.spinner", SpinnerActivity.class); } // end of SpinnerActivityTest constructor definitionPortions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  27. 27. setupメソッドを追加 @Override protected void setUp() throws Exception { setUp super.setUp(); setActivityInitialTouchMode(false); mActivity = getActivity(); mSpinner = (Spinner) mActivity.findViewById( com.android.example.spinner.R.id.Spinner01 ); mPlanetData = mSpinner.getAdapter(); } // end of setUp() method definitionPortions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  28. 28. setupメソッドを追加(の補足) @Override protected void setUp() throws Exception { setUp super.setUp(); setActivityInitialTouchMode(false); mActivity = getActivity(); mSpinner = (Spinner) mActivity.findViewById( com.android.example.spinner.R.id.Spinner01 ); mPlanetData = mSpinner.getAdapter(); } // end of setUp() method definitionPortions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  29. 29. setupメソッドを追加(の補足)setActivityInitialTouchMode(false);テストメソッドで send key イベントを利用する場合は、デバイス or エミュレータのタッチモードをOFFにします。
  30. 30. 手直し private SpinnerActivity mActivity; private Spinner mSpinner; private SpinnerAdapter mPlanetData; import android.widget.Spinner; import android.widget.SpinnerAdapter;
  31. 31. 初期状態のテストを書きますpublic void testPreConditions() { assertTrue(mSpinner.getOnItemSelectedListener() != null); assertTrue(mPlanetData != null); assertEquals(mPlanetData.getCount(),ADAPTER_COUNT); } // end of testPreConditions() method definitionメンバー変数も追加public static final int ADAPTER_COUNT = 9;Portions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  32. 32. さっきのテストの内容 mSpinner.getOnItemSelectedListener() != null Spinnerがセレクトされた場合のリスナーが セットされているか mPlanetData != null プラネットに値がセットされているか mPlanetData.getCount(), ADAPTER_COUNT プラネットが指定の数だけセットされているか
  33. 33. テストを実行してみます。
  34. 34. UIのテストを追加してみます。 public void testSpinnerUI() { mActivity.runOnUiThread( new Runnable() { public void run() { mSpinner.requestFocus(); mSpinner.setSelection(INITIAL_POSITION); } // end of run() method definition } // end of anonymous Runnable object instantiation ); // end of invocation of runOnUiThread } public static final int INITIAL_POSITION = 0;Portions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  35. 35. さっきのテストの内容 mSpinner.requestFocus(); mSpinner.setSelection(INITIAL_POSITION); Spinnerにフォーカスをあてて初期状態(先頭)を選ぶ
  36. 36. Spinnerを動かしてみるthis.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);for (int i = 1; i <= TEST_POSITION; i++) { this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN); this.sendKeys} // end of for loopthis.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);public static final int TEST_POSITION = 5;Portions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  37. 37. さっきのテストの内容this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);Spinnerを開く。(すでにフォーカスがあたっている)this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);Spinnerの選択肢を指定回数だけ移動this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);Spinnerの選択肢を確定
  38. 38. 結果をチェックしますmPos = mSpinner.getSelectedItemPosition(); mSelection = (String)mSpinner.getItemAtPosition(mPos); TextView resultView = (TextView) mActivity.findViewById( com.android.example.spinner.R.id.SpinnerResult ); String resultText = (String) resultView.getText(); assertEquals(resultText,mSelection); } // end of testSpinnerUI() method definitionPortions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  39. 39. チェックの内容 assertEquals(resultText,mSelection); 指定したSpinnerの選択肢と、TextViewの内容が一致すること
  40. 40. その後のテストケース アプリ終了時のSpinnerの選択状態をセット ※アプリを再起動 mActivity.finish(); mActivity = this.getActivity(); Spinnerの位置があっていること さらに、resume()させてみるなど mInstr.callActivityOnResume(mActivity);Portions of this page are modifications based on work created and shared by the Android Open Source Projectand used according to terms described in the Creative Commons 2.5 Attribution License.
  41. 41. 以上、詳しくはこちら "Activity Testing Tutorial" http://goo.gl/IR4Vs ご清聴を感謝いたします。
  42. 42. 年が明けたのでクロスコミュニティ勉強会 発表資料 本年も宜しくお願いします。 m(. .)m

×