ユーザ用ツール

サイト用ツール


junit4

注意点

・ビルドツール(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

junit4.txt · 最終更新: 2015/12/04 13:16 by sou