【Java】Unit Testを行う

#はじめに
統合開発環境である**IntelliJ IDEA**で**JUnit Test**を行ったときの手順をまとめました．
![intellij-idea-java-ide_orig.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/7b27e35b-f65f-9620-e35c-e9964fb3228a.jpeg)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/d8009a9e-f9d8-edeb-1a8e-4acf29bad493.png" width=40%>



**JUnit Test**は，***作ったプログラムがどんな場合でもきちんと動くかどうかを検証するテスト***のことです．

例えば，「1〜9までの好きな数字を入力してください！」という内容でint型の変数用意して標準入力待ってても，ユーザが文字列（String型）入力しようものならエラー出ますよね！

でもコンパイルした時にはエラーはでなかった．．．なんて経験ありますよね

入力データによってどうなるかわからないようなコードを前もってテストしておこう！というのが**JUnit Test**なわけです．


#手順
##1. Junit testしたいJavaファイルを用意
<img width="888" alt="Screen Shot 2019-05-09 at 11.19.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/56547a3e-2ec8-2dd6-dab8-ace850637163.png">
今回はこの```Main.java```の```Person```クラスに対して**JUnit Test**を行います．

##2. テスト用のディレクトリを作成
![Screen Shot 2019-05-09 at 9.56.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/c3f457f7-316a-dc6e-4fed-c28903c754aa.png)
現在作業中のプロジェクトファイル```.iml```ファイルを選択した状態で右クリック

```New``` --> ```Directory```

![Screen Shot 2019-05-09 at 9.56.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/5db01a6f-7e56-7635-af9f-d794f109ae69.png)


この例ではディレクトリ名を```Test```とします

##3. 作ったディレクトリをTests用に設定

　```File```-->```Project Structure```

![Screen Shot 2019-05-09 at 9.57.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/e994c734-db0d-f3ec-b566-069a66ac480d.png)

　```Modules```-->```Test```（さっき作ったテスト用ディレクトリ）-->右クリック-->```Tests```

![Screen Shot 2019-05-09 at 9.57.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/8675790d-88c9-738b-936f-30ac04744a26.png)

**Tests**ディレクトリに設定されると下図左のようにテスト用ディレクトリの色が緑色に変わります．
![Screen Shot 2019-05-09 at 9.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/07ceb995-42ff-16a4-7ce5-1570a98f5e30.png)


##4. テスト用クラスを作成
テストしたいクラス（この例では```Person```）にカーソルを置いた状態でオレンジの電球マークを選択

```Create Test```
<img width="418" alt="Screen Shot 2019-05-09 at 11.45.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/8a148475-a72d-0274-c9b3-f67f076a2c8e.png">

　```Testing library``` --> ```JUnit4```（または```JUnit5```）を選択


<img width="775" alt="Screen Shot 2019-05-09 at 11.46.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/11974132-f513-cb74-4aea-6e812f4f3bc1.png">

すると，作ったテスト用ディレクトリの中に```[選んだクラス]Test```と書かれたテスト用クラスが生成されます

この例では```PersonTest```クラスが生成されます．


##5. テスト用クラスを編集
<img width="877" alt="Screen Shot 2019-05-09 at 10.17.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/f00acce1-eafa-c212-4c8c-f9503621741a.png">

このように編集しました．

```assertEquals(期待される結果 , クラス.関数)```

のように記述します．

つまり，この例では```Person.name()```の返り値として文字列```Shuto```を期待してることになります．


##6. 実行
<img width="931" alt="Screen Shot 2019-05-09 at 10.18.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/eefc65e7-a3c7-3389-29f9-961cf24cb14b.png">
<img width="530" alt="Screen Shot 2019-05-09 at 10.23.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/a190a14c-e313-dc33-37f7-d8a615e8bf51.png">

```Run 'PersonTest'```

<img width="803" alt="Screen Shot 2019-05-09 at 13.43.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/9a55d013-3acb-c79e-07e2-d4579d54cc2a.png">

期待された結果になれば，緑色のラインが一瞬出て```Tests passed```が出てきます

では，あえて期待される結果を```Shuto```--->```hello```に変えて再テストしてみます

<img width="1005" alt="Screen Shot 2019-05-09 at 10.27.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/fd82b0ed-cdaa-cd55-98a1-91df0c5e44dc.png">

期待してた結果と実際に返ってきた結果が異なったので```Tests fialed```となりました（わざとさせたというべきか）．

　```Expected:``` 期待される値
　```Actual:```実際に返ってきた値


このようにして**JUnit Test**は行われます．


ちなみに，下図のように，既にテストが成功した部分は緑色に，まだテストしてなかったり失敗した部分は赤色で示されます．

<img width="662" alt="Screen Shot 2019-05-09 at 14.25.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377231/09a765c1-146b-df5c-6dbf-4f82f75ab485.png">


こんな感じで作ったコードをテストして逐次回改善してく流れになるかと思います．

#おわりに
今回は作ったJavaクラスに対して**JUnit Test**を行いました．

一度やり方覚えてしまえば非常に簡単にテストできるかと思います．

読んでいただきありがとうございました．