===== 注意点 ===== ・ビルドツール(build.gradle)のバージョンが1.0.0以上の必要がある。\\ ・ビルドタイプが「debug」でしかテストされない。「release」でも行いたい場合は下記を追加する。\\ android { // ... testBuildType "release" } ===== ビルドファイルの設定 ===== ・build.gradle(app)\\ android { defaultConfig { // ... testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"\\ } } dependencies { // ... // testing libs 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:rules:0.3'\\ } ===== テストコードの作成 ===== パッケージ名(androidTest)ディレクトリにテストコードを作成します。\\ デフォルトでApplicationTestというクラスが生成されている場所です。\\ - JUnit 4 で実装されたテストクラスには @RunWith(AndroidJUnit4.class) をつける\\ - テスト対象メソッドには @Test をつける\\ - setUp() を Override し、public に変更し @Before をつける\\ - tearDown() を Override し、public に変更し @After をつける\\ - 必要に応じて AndroidTestCase.setContext(InstrumentationRegistry.getContext()) や\\InstrumentationTestCase.injectInstrumentation(InstrumentationRegistry.getInstrumentation()) を setUp() で行う\\ ---------------------------------\\ @RunWith(AndroidJUnit4.class) 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はこっちを推奨してる?\\ \\ \\ ===== 実行 ===== run > setting (実行 > デバッグ設定)\\ +を押下\\ Android Tests\\ 名前を入力\\ Moduleでappを選択\\ USBデバイスでテストを実行する場合は、USB Deviceにチェックを入れる\\ 適用 > 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 ===== Android JUnit 4 形式のテストにする\\ http://y-anz-m.blogspot.jp/2015/08/androidjunit-4.html\\ Build High-Quality Apps\\ https://google.github.io/android-testing-support-library/\\ Building Instrumented Unit Tests\\ 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\\