EclipseにおけるJUnit5を使ったテストの実施方法

# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。

JavaにはJUnitという、テストの仕組みがあります。
クラスの追加やクラスの編集を行った際は、JUnitのテストを追加が１セットのようです(多分）。
今回はテストの作成方法や実施方法などについて整理したいと思います。

なお、本記事ではJUnit5を利用します。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7)から閲覧可能です。

なるべく、初心者目線で作成するつもりですが、分かりづらい部分ありましたら、コメント頂きたいです。

# 動作環境
|種類|バージョン|
|---|---|
|OS|Windows Professional 20H2|
|Eclipse|2022 Full Edition|

※Eclipseのダウンロードについては、[こちら](https://qiita.com/kirin1218/items/02bfeb333335842c56ae)の記事をご確認ください。

# JUnitのインストール
「Pleiades All in One Eclipse」にはJUnitが既に内包されているようで、<font color="red">インストールは不要</font>です。

# JUnitテストケース作成の準備
## プロジェクトの作成
[こちら](https://qiita.com/kirin1218/items/02bfeb333335842c56ae#%E6%96%B0%E8%A6%8F%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6hello-world%E3%81%99%E3%82%8B)を参考に新規でプロジェクトを作成します。

## テスト対象のメソッドを作成する
以下のようなテスト用のメソッドを作成します

```
package helloworld;

public class HelloWorld {

  public static void main(String[] args) {
    // TODO 自動生成されたメソッド・スタブ

  }

  // 引数を加算して返却する
  public int add(int p1, int p2) {
    return p1 + p2;
  }

}
```
# JUnitテストケースの作成
プロパティー>新規>その他をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/4cbcf6a2-4214-8e3a-5ebe-33d17f4fc1d1.png)

ウィザードを選択ダイアログでJava>JUnit>JUnitテスト・ケースを選択し、次へボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/e4bdeed1-53d8-7533-b913-26afacadc4ea.png)

「新規JUnit Jupiterテスト」を選択し、名前に「HelloWorldTest」と入力し完了ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/96ee0395-17c3-1663-5c83-da2ce6fcca85.png)

JUnit5の追加確認ダイアログでOKボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/bdd4ced5-83c8-cfaa-bc17-f1bddc8a12f3.png)

helloworld/src/helloworld/HelloWorldTest.javaが作成されている。
※別記事の[EclipseにおけるMavenを使ったシンプルプロジェクトの作成と実行](https://qiita.com/kirin1218/items/ec9c64e9dcebc1778dac#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%A7%8B%E6%88%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)で記載した通り、mavenでプロジェクトを作成するとtest用のjavaファイルは別フォルダに配置するようですが、今回はあまり気にせず同階層に作成しています。

HelloWorldTest.javaを以下のように編集します。

```HelloWorldTest.java
package helloworld;

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

class HelloWorldTest {

  @Test
  void Addメソッドの動作確認() {
    HelloWorld obj = new HelloWorld();
    int addResult = obj.add(3, 5);
    assertEquals(8, addResult);
  }
}
```
コードの補足をします。
* 関数名は日本語で指定・・・テスト一覧にテスト関数名が表示されるので、視覚的にわかりやすくするためです
* テスト対象のメソッドを呼び出します(今回はaddメソッド）
* 検証方法として、addメソッドの結果と期待値(3+5で8となることを期待してるので、期待値は8)が一致するかをassertEqualsメソッドで確認します。

これで準備完了です。

# JUnitテストの実行
プロジェクト名を右クリック>実行>JUnitテストをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/c6beba76-4392-4005-96ab-05b4ede7b4c4.png)

# JUnitテスト結果の確認
JUnitのテストケース一覧とテスト結果はJUnitビューに表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/e83efea8-d2dc-ff29-b65f-d270df8ebe3d.png)

エラーも失敗も0なので、成功したようです。

次に、ソースを変更してわざと失敗するようにして実行します。
※テストの再実行はJUnitビューからも行えます。

```HelloWorldTest.java
package helloworld;

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;

class HelloWorldTest {

  @Test
  void Addメソッドの動作確認() {
    HelloWorld obj = new HelloWorld();
    int addResult = obj.add(3, 5);
    //わざと失敗させる
    //assertEquals(8, addResult);
    assertEquals(9, addResult);
  }
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/4026db90-d85e-f149-3563-33c773d33c45.png)

今回は期待してるのは9だけど、実行結果は8だったよ。というメッセージと共にテストが失敗しました。

# テスト用のコードのデバッグ
中断したいコード行にブレークポイントを作成します。
その後、プロジェクト名を右クリック>デバッグ>JUnitテストをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/1fac4aa8-57b3-04be-04f4-081e538b7423.png)

# 最後に
今回はEclipseにおけるJUnitの基本的な利用方法について整理しました。

一度テストを作成することで、その場限りのテストではなく、今後ソースを変更した際にデグレート(変更により、既存の機能が期待通り動作しなくなること）を起こしていないかの確認にも利用できます。

なお、実用性を考えると、テスト対象のクラスやメソッドに合わせてテスト前準備や後処理、検証方法などが必要となるのですが、
そちらの整理については別の記事にて整理できればと思います。

他の記事については[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7)から御覧ください。