SlideShare a Scribd company logo
年が明けたのでクロスコミュニティ勉強会 発表資料




 Androidのテストについて
 (副題: Activity Testing Tutorial をやってみた)




         http://goo.gl/IR4Vs
年が明けたのでクロスコミュニティ勉強会 発表資料




     まずは
     新年の
     ご挨拶
年が明けたのでクロスコミュニティ勉強会 発表資料



     謹賀新年
年が明けたのでクロスコミュニティ勉強会 発表資料




   ちなみに
   この資料
年が明けたのでクロスコミュニティ勉強会 発表資
料




    Made with




        http://goo.gl/7BEcE
年が明けたのでクロスコミュニティ勉強会 発表資
料




    Activity Testing Tutorial
    アクティビティ・テストのチュートリアルをやってみました。


      詳しくはこちら



           http://goo.gl/IR4Vs
Activity Testing Tutorial




  前提条件
前提条件 1/4



基本的なアプリが作れること
※Androidプロジェクトが使える



    http://goo.gl/IR4Vs
前提条件 1/4(続き)
前提条件 2/4


多少なりとも

テストフレームワーク
                      の知識がある

http://ja.wikipedia.org/wiki/XUnit
前提条件 2/4(続き)


JUnit NUnit
  MSTest        RSpec ...

    http://goo.gl/Mde5l
前提条件 3/4


 Eclipse           と

   ADT             が使える
                Android Development Tools (ADT)



    http://goo.gl/eoVnU
前提条件 3/4(続き)




                         http://goo.gl/eoVnU
Portions of this page are modifications based on work created and shared by the Android Open Source Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
前提条件 4/4(続き)



 Android 1.5 platform
 (API Level 3) or higher

                         http://goo.gl/eoVnU
Portions of this page are modifications based on work created and shared by the Android Open Source Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
プロジェクトの作成


テストの対象とするメインのプロジェクトを作成します。
チュートリアルに合わせて
"Create project from existing source".
サンプルプロジェクトを取り込みます。




            http://goo.gl/IR4Vs
サンプルプロジェクトを取り込み
SpinnerとTextView




     デザイン画面        実行画面
テストプロジェクトを追加

Test Target を先ほどのSpinnerActivityにセット
テストプロジェクトのマニフェスト
<?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 Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
テストプロジェクトのマニフェスト(部分)


テストプロジェクト
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 Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
Test Case クラスの作成


クラス名:
SpinnerActivityTest
スーパークラス:
android.test.ActivityInstrumentationTestCase2<SpinnerActivity>
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/gMngM
Portions of this page are modifications based on work created and shared by the Android Open Source Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
さらに Android Testの詳細については




  Testing Fundamentals
       http://goo.gl/rdIFx
Test Case クラスの作成
エラー発生
手直しします


      テスト対象のクラスをインポート
       import com.android.example.spinner.SpinnerActivity;



       テストクラスのコンストラクタを追加
       public SpinnerActivityTest() {
          super("com.android.example.spinner", SpinnerActivity.class);
        } // end of SpinnerActivityTest constructor definition




Portions of this page are modifications based on work created and shared by the Android Open Source Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
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 definition
Portions of this page are modifications based on work created and shared by the Android Open Source Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
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 definition
Portions of this page are modifications based on work created and shared by the Android Open Source Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
setupメソッドを追加(の補足)


setActivityInitialTouchMode(false);
テストメソッドで send key イベントを利用する場合は、
デバイス or エミュレータのタッチモードをOFFにします。
手直し


 private SpinnerActivity mActivity;
 private Spinner mSpinner;
 private SpinnerAdapter mPlanetData;



 import android.widget.Spinner;
 import android.widget.SpinnerAdapter;
初期状態のテストを書きます


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 Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
さっきのテストの内容


  mSpinner.getOnItemSelectedListener() != null
  Spinnerがセレクトされた場合のリスナーが
  セットされているか

  mPlanetData != null
  プラネットに値がセットされているか


  mPlanetData.getCount(), ADAPTER_COUNT

  プラネットが指定の数だけセットされているか
テストを実行してみます。
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 Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
さっきのテストの内容

 mSpinner.requestFocus();
 mSpinner.setSelection(INITIAL_POSITION);

 Spinnerにフォーカスをあてて初期状態(先頭)を選ぶ
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 loop
this.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 Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
さっきのテストの内容


this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
Spinnerを開く。(すでにフォーカスがあたっている)


this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
Spinnerの選択肢を指定回数だけ移動


this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
Spinnerの選択肢を確定
結果をチェックします

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 definition

Portions of this page are modifications based on work created and shared by the Android Open Source Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
チェックの内容


 assertEquals(resultText,mSelection);

 指定したSpinnerの選択肢と、TextViewの内容が一致すること
その後のテストケース

     アプリ終了時の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 Project
and used according to terms described in the Creative Commons 2.5 Attribution License.
以上、詳しくはこちら




 "Activity Testing Tutorial"
      http://goo.gl/IR4Vs




    ご清聴を感謝いたします。
年が明けたのでクロスコミュニティ勉強会 発表資料




  本年も宜しくお願いします。

        m(. .)m

More Related Content

What's hot (20)

PPTX
20200304 vuejs
yamamotomsc
 
PDF
Try_to_writecode_practicaltest #atest_hack
kimukou_26 Kimukou
 
PPTX
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
removed_96f4639f4009e61a478bf38f188e8404
 
PDF
Spring integration概要
kuroiwa
 
PPTX
Gradleでビルドするandroid NDKアプリ
Hideyuki Kikuma
 
PDF
つ部 Android Studio 勉強会 12/7
Hikaru Wada
 
PPTX
Spring Integration 超入門
Yasutaka Sugamura
 
PDF
ReduxとSwiftの組み合わせ:改訂版
Fumiya Sakai
 
PDF
Android cleanarchitecture
Tomoaki Imai
 
PPTX
Spring と TDD
Takeshi Ogawa
 
PDF
Dependency injection
Yuki Matsumura
 
PDF
Realmの暗号化とAndroid System
Keiji Ariyama
 
PDF
Android Studioの魅力
Keiji Ariyama
 
PDF
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
 
PDF
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa
Keiji Ariyama
 
PDF
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
kan-notice
 
PDF
はてなにおける Android アプリのソフトウェアテスト
Yu Nobuoka
 
PDF
DI(依存性注入)について
Yui Ito
 
DOCX
[PS11]ネットワーク第5回
Yukiko Kato
 
PDF
Laravelとテストについて
Takeo Noda
 
20200304 vuejs
yamamotomsc
 
Try_to_writecode_practicaltest #atest_hack
kimukou_26 Kimukou
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
removed_96f4639f4009e61a478bf38f188e8404
 
Spring integration概要
kuroiwa
 
Gradleでビルドするandroid NDKアプリ
Hideyuki Kikuma
 
つ部 Android Studio 勉強会 12/7
Hikaru Wada
 
Spring Integration 超入門
Yasutaka Sugamura
 
ReduxとSwiftの組み合わせ:改訂版
Fumiya Sakai
 
Android cleanarchitecture
Tomoaki Imai
 
Spring と TDD
Takeshi Ogawa
 
Dependency injection
Yuki Matsumura
 
Realmの暗号化とAndroid System
Keiji Ariyama
 
Android Studioの魅力
Keiji Ariyama
 
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
 
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa
Keiji Ariyama
 
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
kan-notice
 
はてなにおける Android アプリのソフトウェアテスト
Yu Nobuoka
 
DI(依存性注入)について
Yui Ito
 
[PS11]ネットワーク第5回
Yukiko Kato
 
Laravelとテストについて
Takeo Noda
 

Viewers also liked (7)

ODP
Making bootable USB by update from 4.1 to 5.0
Kazuaki Ueda
 
PDF
Android multiscreen
Kazuaki Ueda
 
ODP
Ci tutorial
Kazuaki Ueda
 
PDF
水曜デザイン塾 文字モジ会
Kazuaki Ueda
 
PDF
Jaws User Group in Ehime Lightning Talk
Kazuaki Ueda
 
ODP
Esxi client-4to5
Kazuaki Ueda
 
PDF
Android api-levels
Kazuaki Ueda
 
Making bootable USB by update from 4.1 to 5.0
Kazuaki Ueda
 
Android multiscreen
Kazuaki Ueda
 
Ci tutorial
Kazuaki Ueda
 
水曜デザイン塾 文字モジ会
Kazuaki Ueda
 
Jaws User Group in Ehime Lightning Talk
Kazuaki Ueda
 
Esxi client-4to5
Kazuaki Ueda
 
Android api-levels
Kazuaki Ueda
 
Ad

Similar to Android test tutorial (20)

KEY
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
 
PDF
Unit test in android
Tatsuya Maki
 
PDF
ABC 2011 Summer
miyatay
 
PDF
ABC
Yumi Miyata
 
PPTX
初めてのAndroid開発
tanihiro
 
PDF
Android Lecture #04 @PRO&BSC Inc.
Yuki Higuchi
 
PPTX
ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~
Saiki Iijima
 
PDF
ABC2011w_テスト部
miyatay
 
PDF
Line Creators Studio Android With Kotlin
LINE Corporation
 
KEY
テスト初心者Androiderのためのソフトウェアテスト入門
Satoshi Watanabe
 
PDF
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
Masafumi Terazono
 
PPTX
0720 abc seminar
Hiroshi Hayama
 
PDF
Androidテスティング実践 基礎編
株式会社 NTTテクノクロス
 
PPTX
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Yoko TAMADA
 
PPTX
Junit4
ichikaz3
 
PDF
Androidで学ぶ
Kensuke Onishi
 
PDF
AndroidでDIxAOP
nfc research
 
PPTX
Android アプリケーション開発応用
OESF Education
 
PDF
Tokyo GTUG Bootcamp2010
Takashi EGAWA
 
PPTX
ミクシィ 21卒向け Android研修
akkuma
 
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
 
Unit test in android
Tatsuya Maki
 
ABC 2011 Summer
miyatay
 
初めてのAndroid開発
tanihiro
 
Android Lecture #04 @PRO&BSC Inc.
Yuki Higuchi
 
ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~
Saiki Iijima
 
ABC2011w_テスト部
miyatay
 
Line Creators Studio Android With Kotlin
LINE Corporation
 
テスト初心者Androiderのためのソフトウェアテスト入門
Satoshi Watanabe
 
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
Masafumi Terazono
 
0720 abc seminar
Hiroshi Hayama
 
Androidテスティング実践 基礎編
株式会社 NTTテクノクロス
 
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Yoko TAMADA
 
Junit4
ichikaz3
 
Androidで学ぶ
Kensuke Onishi
 
AndroidでDIxAOP
nfc research
 
Android アプリケーション開発応用
OESF Education
 
Tokyo GTUG Bootcamp2010
Takashi EGAWA
 
ミクシィ 21卒向け Android研修
akkuma
 
Ad

More from Kazuaki Ueda (10)

PDF
いろいろCMS勉強会 featuring SHIRASAGI
Kazuaki Ueda
 
PDF
Android studio で行ってみよう!!
Kazuaki Ueda
 
PDF
IPv4 address
Kazuaki Ueda
 
PDF
ローカル開催コミュニティ
Kazuaki Ueda
 
PDF
Cms festa-0216
Kazuaki Ueda
 
PDF
Lt presentation
Kazuaki Ueda
 
PDF
Sudachi hackathon
Kazuaki Ueda
 
PDF
Word bench愛媛
Kazuaki Ueda
 
PDF
Android Develop presentation on 19 Sep 2012.
Kazuaki Ueda
 
ODP
Making bootable usb of ESXi-5.0
Kazuaki Ueda
 
いろいろCMS勉強会 featuring SHIRASAGI
Kazuaki Ueda
 
Android studio で行ってみよう!!
Kazuaki Ueda
 
IPv4 address
Kazuaki Ueda
 
ローカル開催コミュニティ
Kazuaki Ueda
 
Cms festa-0216
Kazuaki Ueda
 
Lt presentation
Kazuaki Ueda
 
Sudachi hackathon
Kazuaki Ueda
 
Word bench愛媛
Kazuaki Ueda
 
Android Develop presentation on 19 Sep 2012.
Kazuaki Ueda
 
Making bootable usb of ESXi-5.0
Kazuaki Ueda
 

Recently uploaded (8)

PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 

Android test tutorial