この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
junit4 [2015/10/12 21:31] sou 作成 |
junit4 [2015/12/04 13:16] (現在) sou |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ■注意点\\ | + | ===== 注意点 ===== |
・ビルドツール(build.gradle)のバージョンが1.0.0以上の必要がある。\\ | ・ビルドツール(build.gradle)のバージョンが1.0.0以上の必要がある。\\ | ||
・ビルドタイプが「debug」でしかテストされない。「release」でも行いたい場合は下記を追加する。\\ | ・ビルドタイプが「debug」でしかテストされない。「release」でも行いたい場合は下記を追加する。\\ | ||
- | android { | + | android { |
// ... | // ... | ||
testBuildType "release" | testBuildType "release" | ||
- | } | + | } |
- | ■ビルドファイルの設定\\ | + | ===== ビルドファイルの設定 ===== |
・build.gradle(app)\\ | ・build.gradle(app)\\ | ||
- | android {\\ | + | android { |
- | defaultConfig {\\ | + | defaultConfig { |
- | // ...\\ | + | // ... |
- | \\ | + | |
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"\\ | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"\\ | ||
- | }\\ | + | } |
- | }\\ | + | } |
- | dependencies {\\ | + | dependencies { |
- | // ...\\ | + | // ... |
- | \\ | + | |
- | // runner及びrulesはtestingライブラリより分割された (旧:testing-support-lib)\\ | + | // testing libs |
androidTestCompile 'com.android.support:support-annotations:23.0.0'\\ | androidTestCompile 'com.android.support:support-annotations:23.0.0'\\ | ||
+ | // runner及びrulesはtestingライブラリより分割された (旧:testing-support-lib)\\ | ||
androidTestCompile 'com.android.support.test:runner:0.3'\\ | androidTestCompile 'com.android.support.test:runner:0.3'\\ | ||
androidTestCompile 'com.android.support.test:rules:0.3'\\ | androidTestCompile 'com.android.support.test:rules:0.3'\\ | ||
- | }\\ | + | } |
- | ■テストコードの作成\\ | + | ===== テストコードの作成 ===== |
パッケージ名(androidTest)ディレクトリにテストコードを作成します。\\ | パッケージ名(androidTest)ディレクトリにテストコードを作成します。\\ | ||
デフォルトでApplicationTestというクラスが生成されている場所です。\\ | デフォルトでApplicationTestというクラスが生成されている場所です。\\ | ||
ライン 35: | ライン 35: | ||
- setUp() を Override し、public に変更し @Before をつける\\ | - setUp() を Override し、public に変更し @Before をつける\\ | ||
- tearDown() を Override し、public に変更し @After をつける\\ | - tearDown() を Override し、public に変更し @After をつける\\ | ||
- | - 必要に応じて AndroidTestCase.setContext(InstrumentationRegistry.getContext()) や \\InstrumentationTestCase.injectInstrumentation(InstrumentationRegistry.getInstrumentation()) を setUp() で行う\\ | + | - 必要に応じて AndroidTestCase.setContext(InstrumentationRegistry.getContext()) や\\InstrumentationTestCase.injectInstrumentation(InstrumentationRegistry.getInstrumentation()) を setUp() で行う\\ |
- | - メソッド名の命名規則として先頭にtestをつける (例: testHoge())\\ | + | |
- | ・ちょっと裏ワザ\\ | ||
- | テストしたいクラス名を選択した状態でAlt + Enterで一括でテスト関数を生成出来る。\\ | ||
---------------------------------\\ | ---------------------------------\\ | ||
- | @RunWith(AndroidJUnit4.class)\\ | + | @RunWith(AndroidJUnit4.class) |
- | public class MetricsTest extends AndroidTestCase {\\ | + | public class MetricsTest extends AndroidTestCase { |
+ | |||
+ | @Before | ||
+ | public void setUp() throws Exception { | ||
+ | super.setUp(); | ||
+ | // instrumentation のパッケージContext | ||
+ | setContext(InstrumentationRegistry.getContext()); | ||
+ | } | ||
+ | |||
+ | @Test | ||
+ | public void something() throws Exception { | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | @After | ||
+ | public void tearDown() throws Exception { | ||
+ | super.tearDown(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== メソッドについて ===== | ||
+ | // 予測, 実際\\ | ||
+ | assertEquals(expected, actual);\\ | ||
+ | \\ | ||
+ | // 実際, 予測\\ | ||
+ | assertThat(actual, is(expected));\\ | ||
+ | 上記は「import static org.hamcrest.CoreMatchers.*;」が必要。\\ | ||
+ | Junit4はこっちを推奨してる?\\ | ||
\\ | \\ | ||
- | @Before\\ | ||
- | public void setUp() throws Exception {\\ | ||
- | super.setUp();\\ | ||
- | // instrumentation のパッケージContext\\ | ||
- | setContext(InstrumentationRegistry.getContext());\\ | ||
- | }\\ | ||
\\ | \\ | ||
- | @After\\ | ||
- | public void tearDown() throws Exception {\\ | ||
- | super.tearDown();\\ | ||
- | }\\ | ||
- | }\\ | ||
- | |||
- | ■メソッドについて\\ | ||
- | // 予想, 実際\\ | ||
- | assertEquals(expected, actual);\\ | ||
- | |||
- | ■ run > setting (実行 > デバッグ設定)\\ | + | ===== 実行 ===== |
+ | run > setting (実行 > デバッグ設定)\\ | ||
+を押下\\ | +を押下\\ | ||
Android Tests\\ | Android Tests\\ | ||
ライン 70: | ライン 80: | ||
USBデバイスでテストを実行する場合は、USB Deviceにチェックを入れる\\ | USBデバイスでテストを実行する場合は、USB Deviceにチェックを入れる\\ | ||
適用 > OK\\ | 適用 > OK\\ | ||
+ | いつもどおり実行。\\ | ||
+ | \\ | ||
+ | \\ | ||
+ | |||
+ | ===== メモ ===== | ||
+ | APIから値を取得し、その結果によって何らかの振る舞いを行う場合の流れの例\\ | ||
+ | \\ | ||
+ | 1~5の流れをひとまとめにしてテストするのは難しそう。\\ | ||
+ | 別々に考えれば可能だが、どれをテスト対象とするのか決めておく必要がある。\\ | ||
+ | \\ | ||
+ | 1.リクエスト関数\\ | ||
+ | in:APIの引数など\\ | ||
+ | out:なし\\ | ||
+ | \\ | ||
+ | 2.実際に接続処理を行うHttpClientやURLConnection. (ライブラリの場合もある)\\ | ||
+ | in:request\\ | ||
+ | out:response\\ | ||
+ | \\ | ||
+ | 3.コールバック待ちの無名クラス, メンバ変数など\\ | ||
+ | in:APIからの戻り\\ | ||
+ | out:APIからの戻り\\ | ||
+ | \\ | ||
+ | 4.JSONをパースする関数\\ | ||
+ | in:APIからの戻り\\ | ||
+ | out:なんらかのオブジェクト\\ | ||
+ | \\ | ||
+ | 5.得た結果を処理するビジネスロジック関数\\ | ||
+ | in:なんらかのオブジェクト\\ | ||
+ | out:実装による\\ | ||
+ | |||
+ | ここをテストする場合は、inをモックに置き換える\\ | ||
+ | @Test | ||
+ | public void something() throws Exception { | ||
+ | /** | ||
+ | * モックの生成 | ||
+ | */ | ||
+ | SomeClass mockedSome = mock(SomeClass.class); | ||
+ | | ||
+ | /** | ||
+ | * テストしたいビジネスロジックを記述する(対象のコードと同じコード) | ||
+ | * 但しそこで取り扱うオブジェクトは、上記のモックに置き換わる | ||
+ | * | ||
+ | * ※対象のコードを変更した場合は、テストコードも同じ用に修正する必要がある。 | ||
+ | * outがある関数を呼び出す場合は、outを検証するだけで良い | ||
+ | */ | ||
+ | } | ||
+ | | ||
- | ■参考URL\\ | + | ===== 参考URL ===== |
Android JUnit 4 形式のテストにする\\ | Android JUnit 4 形式のテストにする\\ | ||
http://y-anz-m.blogspot.jp/2015/08/androidjunit-4.html\\ | http://y-anz-m.blogspot.jp/2015/08/androidjunit-4.html\\ | ||
ライン 79: | ライン 136: | ||
Building Instrumented Unit Tests\\ | Building Instrumented Unit Tests\\ | ||
https://developer.android.com/intl/ja/training/testing/unit-testing/instrumented-unit-tests.html\\ | https://developer.android.com/intl/ja/training/testing/unit-testing/instrumented-unit-tests.html\\ | ||
+ | テスト - Mixi AndroidTraining\\ | ||
http://mixi-inc.github.io/AndroidTraining/fundamentals/2.11.testing.html\\ | http://mixi-inc.github.io/AndroidTraining/fundamentals/2.11.testing.html\\ | ||