[Java] IntelliJ で JUnit による単体テストを実行する設定

手動で設定する場合の例。

> – [テストの準備 | IntelliJ IDEA](https://pleiades.io/help/idea/testing.html)
> – [テストの作成 | IntelliJ IDEA](https://pleiades.io/help/idea/create-tests.html)
> – [テストの実行 | IntelliJ IDEA](https://pleiades.io/help/idea/performing-tests.html#rerun)
> – [テスト結果を調べる | IntelliJ IDEA](https://pleiades.io/help/idea/viewing-and-exploring-test-results.html)

## テストライブラリを手動で追加する

JUnit をダウンロード、配置する。

1. 「メインメニューからファイル | プロジェクト構造(⌘;)」を選択。
2. 「プロジェクト設定 > ライブラリ」を選択し、「the New Project Library button | Maven」からをクリック。
3. 開いたダイアログで `org.junit.jupiter:junit-jupiter:5.x` 最新版を指定。
4. 変更を適用。

次にテストディレクトリを作成する。

test とその配下ディレクトリを作成し、プロジェクトウィンドウから右クリック「ディレクトリをマーク」を選択。
それぞれを下記のとおりに設定する。

– `test/java` を「テストソースルート」
– `test/resources` を「テストリソースルート」

“`prettyprinted
./
├── array-loop-java.iml
├── out
│   └── production
├── src
│   └── com.example.arrayloop
│   └── ArrayLoop
└── test
├── java
└── resources
“`

## サンプルファイルを作成する

ここで書いたコードを Calculate クラスに分割して、テストを書く。

> – [イテレータ(拡張 for と型推論) | deadwood](https://www.d-wood.com/blog/2021/04/13_12252.html)

空の `Calculate.java` を作成。
そのファイル内から「コード生成 > テスト…」でテストファイルの雛形が作成される。

“`prettyprinted
./
├── array-loop-java.iml
├── out
│   ├── production
│   └── test
├── src
│   └── com.example.arrayloop
│   ├── ArrayLoop
│   └── Calculate
└── test
├── java
└── resources
“`

Calculate クラスのテスト。

“`java:test/java/com/example/arrayloop/CalculateTest.java
package com.example.arrayloop;

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

import java.util.Map;
import org.junit.jupiter.api.Test;

class CalculateTest {
@Test
void 引数に配列を受け取れること() {
int[] mps = { 50, 60, 70, 80 };
var map = Calculate.mps_to_kmph(mps);
assertEquals(4, map.size());
}

@Test
void KeyにmpsがValueにkmphのMapが返ること() {
int[] mps = { 50 };
var map = Calculate.mps_to_kmph(mps);
assertEquals(Map.of(50, 180), map);
}
}
“`

Calculate クラス。

“`java:src/com/example/arrayloop/Calculate.java
package com.example.arrayloop;

import java.util.HashMap;
import java.util.Map;

public class Calculate {
public static Map mps_to_kmph(int[] mps) {
var kmph = new HashMap();
for (var i : mps) {
kmph.put(i, i * 3600 / 1000);
}
return kmph;
}
}
“`

main()

“`java:src/com/example/arrayloop/ArrayLoop.java
package com.example.arrayloop;

public class ArrayLoop {

public static void main(String[] args) {
var start = System.currentTimeMillis();

var msg = new StringBuilder();

int[] array = { 50, 60, 70, 80 };
var map = Calculate.mps_to_kmph(array);
for (var entry : map.entrySet()) {
msg.append(“最大瞬間風速”).append(entry.getKey()).append(“m = 時速”).append(entry.getValue()).append(“km”).append(“\n”);
}

System.out.print(msg);

var end = System.currentTimeMillis();
System.out.println((end – start) + “ミリ秒”);
}
}
“`

> – [DriftwoodJP/array-loop-java](https://github.com/DriftwoodJP/array-loop-java)

## 補遺

> – [JUnit 5 User Guide](https://junit.org/junit5/docs/current/user-guide/)
> – [JUnit 5 ユーザーガイド](https://oohira.github.io/junit5-doc-jp/user-guide/)