Android StudioでのJUnitテストのやり方

#はじめに
Javaのテストと言えば、**JUnit**。それをAndroid Studioで行う方法を紹介します。
#手順
以下のような**SampleActivity.java**があるとします。

```java:SampleActivity.java
package com.websarva.wings.android.junitsample1;

public class SampleActivity {

    private int id;
    private String name;

    public SampleActivity(int id,String name){
        this.id = id;
        this.name = name;
    }

    //IDと名前を紹介
    public String explain(){
        String explain;
        explain = "id:"+id+",name:"+name;
        return explain;
    }

    //IDを取得
    public int getId() {
        return id;
    }

    //名前を取得
    public String getName() {
        return name;
    }
}
```

これをテストしてみましょう！

**手順①テストしたいメソッドの上でCtrl+Shift+T キー（⇧⌘T）を押す**
テストしたいメソッドの上でCtrl+Shift+T キー（⇧⌘T）を押すと、**「Create New Test」**が表示されます。これをクリックします。
![コントロールシフトT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1925070/8090b885-749e-3c11-6853-2592afc838bb.png)

**手順②チェックを入れる**
手順①を終えると、このような画面が表示されます。
Testing libraryは**JUnit4**にしましょう。
そして、Generateの**setUp**にチェックを入れます。
下のMemberはメソッドの一覧です。今回は全てのメソッドをテストしたいので、全てにチェックを入れOKを押します。
![チェック画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1925070/e124a1a3-0286-47cc-91f3-a3d29a6abe90.png)

すると以下のようにディレクトリを指定する画面が出てきます。デフォルトのままでOKを押します。
![choosedes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1925070/37bbc838-a94d-23e2-d7c6-4a7220416f59.png)


**手順③テストメソッドを埋める**
手順②を終えると、**SampleActivityTest.java**が出来ます。
![空白.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1925070/0690f4d2-96aa-41a4-5963-df14e5693368.png)
これを埋めると以下のようになります。

```java:SampleActivityTest.java
package com.websarva.wings.android.junitsample1;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

public class SampleActivityTest {

    SampleActivity sa;

    @Before
    public void setUp() throws Exception {
        sa = new SampleActivity(13,"Tanaka");
    }

    @Test
    public void explain() {
        assertEquals("id:13,name:Tanaka",sa.explain());
    }

    @Test
    public void getId() {
        assertEquals(13,sa.getId());
    }

    @Test
    public void getName() {
        assertEquals("Tanaka",sa.getName());
    }
}
```
説明していきます。
まずは**setUp()**です。これはテストに必要な**インスタンスを作る**メソッドです。

```java
    @Before
    public void setUp() throws Exception {
        sa = new SampleActivity(13,"Tanaka");
    }
```

次に各メソッドに対応するテストコードです。**assertEquals(期待値,実行値)**は**「期待値と実行値が等しい」**ことを表明します。

```java
    @Test
    public void getId() {
        //インスタンスでidのところに13を入れたから、getId()は13と等しいはず。
        assertEquals(13,sa.getId());
    }
```
ほかにも与えられた条件がtrueであることを表明する**assertTrue(条件式)**などもあるので調べてみてください。

**手順④テストを実行**
androidTestのところにある**SampleActivityTest.java**を右クリックして**Run**します。
![runTest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1925070/36272d88-20b7-c2bf-02bd-c6f94e1a4045.png)
すると下にテスト結果が表示されます。
![テスト結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1925070/bbbf26b0-2120-a74a-309c-e14d499af8c2.png)
全てクリアしてますね。
例えば、**SampleActivity.java**の**explain()**を以下のようにします。

```java
   public String explain(){
        String explain;
        explain = "id="+id+",name="+name;//「:」を「=」にした。
        return explain;
    }
```
これでテストを実行すると以下のように**explain**の横に**×**が付きます。
![テストエラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1925070/ea747a65-26f2-57ee-e161-a6e4726b3cc1.png)

#余談
公式ドキュメントを見ると**build.gradle**に色々追加しないといけないらしいですが、プロジェクトを作成した時点で、

```
dependencies {

    implementation 'androidx.appcompat:appcompat:1.4.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
```
すでに**JUnit**が追加されているので気にする必要は無いですね！