More Related Content
Similar to Androidテスティング実践3 ユニットテスト・CI編 (20)
More from 株式会社 NTTテクノクロス (9)
Androidテスティング実践3 ユニットテスト・CI編
- 11. Robolectricのコンセプト
高速に実行できるLocal Unit Testの欠点
(Android Framework APIが使えない)
をRobolectricが克服
ユニットテスト・TDDで重要な
「開発のリズムを損わないサクサクさ」
でAndroid APIが絡んだ部分のテスト実行が可能になる
129Copyright © 2016, NTT Software Corporation.
local JVM (Java SE)
テストコード
JUnitなど
Android Framework API
(空実装→Robolectric)
プロダクトコード
- 15. Robolectricの制限事項(1/2)
Robolectric本体の制限事項
3.0版:API Level 21 (Android 5.0)までサポート
3.1版:API Level 23 (Android 6.0)までサポート
targetSdkVersion=23では動作させるためには、
以下のいずれかの対応が必要
※ https://github.com/robolectric/robolectric/issues/1932 参照
robolectric.propertiesに「sdk=22」と追記する
build.gradleのdependenciesに、以下を追記する。
testCompile 'org.khronos:opengl-api:gl1.1-android-2.1_r1'
※compileSdkVersionとappcompat-v7のバージョンは
同じでなければならない点に注意!
133Copyright © 2016, NTT Software Corporation.
- 16. Robolectricの制限事項(2/2)
134Copyright © 2016, NTT Software Corporation.
プロジェクトのbuild.gradleファイル
// (省略)
android {
// (省略)
compileSdkVersion 21
// (省略)
defaultConfig {
// (省略)
targetSdkVersion 21
// (省略)
}
// (省略)
}
dependencies {
compile 'com.android.support:appcompat-v7:21.
// (省略)
}
新規PJ作成時は最新verになっているの
でcompileSdkVersionに合わせて修正
- 18. mockの概念
136Copyright © 2016, NTT Software Corporation.
Hoge mockHoge = mock(Hoge.class);
Hoge hoge = new Hoge();
例えば
で生成したmockHogeは
と違い
メソッドの戻り値を事前に定義したり
メソッドが呼ばれた事を後から確認したり
できる
- 19. spyの概念
137Copyright © 2016, NTT Software Corporation.
Hoge spyHoge = spy(new Hoge());
Hoge hoge = new Hoge();
例えば
で生成したspyHogeは
と同じ実装を持ちつつ
一部のメソッドの戻り値を事前に定義したり
メソッドが呼ばれた事を後から確認したり
できる
- 21. Copyright © 2016, NTT Software Corporation. 139
【演習3-1】ユニットテスト環境構築
演習課題
ユニットテスト対応
Robolectricのテストサンプル作成
テスト実行
- 23. ユニットテスト対応(Gradle)
141
// (省略)
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// (省略)
testCompile 'junit:junit:4.12'
testCompile 'org.hamcrest:hamcrest-library:1.3'
testCompile 'org.robolectric:robolectric:3.0'
testCompile 'org.mockito:mockito-core:1.10.19'
// (省略)
} (挿入)必要なライブラリの宣言
詳細は別途提示
Copyright © 2016, NTT Software Corporation.
Moduleのbuild.gradleファイル
- 26. コマンドラインからの実行
Instrumented Testを実行する場合(端末を接続した状態で)
Local Unit Test(今回のRobolectric)を実行する場合
Android Studioからの実行
テストしたいメソッドやクラスを選択して右クリック→[Run]
(Ctrl+Shift+F10) ※Preferences→keymap→Run context configuration
テスト実行
144
gradlew connectedAndroidTest
gradlew test
Copyright © 2016, NTT Software Corporation.
テストコードが緑に
なっている
- 35. 4. CIの実現
CIの概要
Android開発プロジェクトに適用する
(参考)Instrumented Testも実行する場合
Copyright © 2016, NTT Software Corporation. 153
- 43. (参考)Instrumented Testも実行する場合
[Jenkinsの管理]→[プラグインの管理]
Android Emulator Pluginをインストールする
ジョブの設定
[ビルド環境]→[Run an Android emulator during build]にチェック
起動したいエミュレータの情報を入力
[Common emulator options]→[Show emulator window]はチェックし
ない
[Invoke Gradle script]→[Tasks]
[connectedAndroidTest]を追加
[ビルド後の処理]→[JUnitテスト結果の集計]
[テスト結果XML]を[app/build/**/TEST*.xml]に修正
Copyright © 2016, NTT Software Corporation. 161
- 45. この研修で説明したこと
自動テストについての考え方
Androidのテストツール基礎知識
Local Unit Test, Instrumented Test, ATSL, ...
システムテスト自動化ツールの使い方
Robotium, Espresso, UI Automator, Appium
ユニットテスト自動化ツールの使い方
各種テストは以下のテクニックを駆使して実現する
Android Studioのリファクタリング機能
テスト用のメソッド・コンストラクタの追加
Mockitoのmock()とspy()
MockWebServer
CIの実現方法
Copyright © 2016, NTT Software Corporation. 163