前回はScannerを使った入力バリデーションを学びました。
今回は「ユニットテスト」について解説します。 JUnit5とMavenを使って、自分が書いたメソッドが正しく動いているかを自動で確認できるテストプログラムを作りましょう。
ユニットテストとは
ユニットテストとは、プログラムの最小単位(メソッドやクラス)が正しく動作するかを確認するテストです。これまでは動作確認のたびにプログラムを実行して目で結果を確認していましたが、ユニットテストを書いておくと、ボタン1つで自動的にすべてのテストを実行して正しく動くか確認できるようになります。
Javaでは「JUnit」というライブラリがユニットテストの標準として広く使われています。
事前準備(Mavenプロジェクトの作成)
ターミナルで任意のフォルダに移動し、以下のコマンドでMavenプロジェクトを作成します。
mvn archetype:generate \
-DgroupId=com.example \
-DartifactId=junit-sample \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=1.5 \
-DinteractiveMode=false

作成されたフォルダに移動します。
cd junit-sample

pom.xml をテキストエディタで開き、<dependencies> の中にJUnit5の依存関係を追加します。
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.11.0</version>
<scope>test</scope>
</dependency>
</dependencies>

また <build> セクションに以下を追加します。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.3.1</version>
</plugin>
</plugins>
</build>

サンプルコード(テスト対象クラス)
ファイル作成
src/main/java/com/example/ フォルダに Calculator.java を作成します

コード入力
以下のコードを入力します。
package com.example;
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public double divide(int a, int b) {
if (b == 0) {
throw new ArithmeticException("0で割ることはできません");
}
return (double) a / b;
}
}

サンプルコード(テストクラス)
ファイル作成
src/test/java/com/example/ フォルダに CalculatorTest.java を作成します

コード入力
以下のコードを入力します。
package com.example;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
Calculator calc = new Calculator();
@Test
@DisplayName("足し算のテスト")
void testAdd() {
assertEquals(8, calc.add(3, 5));
assertEquals(0, calc.add(-1, 1));
assertEquals(-5, calc.add(-3, -2));
}
@Test
@DisplayName("引き算のテスト")
void testSubtract() {
assertEquals(5, calc.subtract(8, 3));
assertEquals(-2, calc.subtract(1, 3));
}
@Test
@DisplayName("掛け算のテスト")
void testMultiply() {
assertEquals(15, calc.multiply(3, 5));
assertEquals(0, calc.multiply(0, 100));
assertEquals(-6, calc.multiply(-2, 3));
}
@Test
@DisplayName("割り算のテスト")
void testDivide() {
assertEquals(2.5, calc.divide(5, 2));
assertEquals(3.0, calc.divide(9, 3));
}
@Test
@DisplayName("0除算のテスト")
void testDivideByZero() {
assertThrows(ArithmeticException.class, () -> calc.divide(10, 0));
}
}

テストの実行
以下のコマンドでテストを実行します。
mvn test

テストがすべて成功した場合、次のような結果が表示されます。
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.example.CalculatorTest
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.123 s
[INFO] -------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -------------------------------------------------------

コードの解説
@Test アノテーションをメソッドに付けることで、そのメソッドがテストとして実行されます。@DisplayName でテストの名前を日本語で付けられるので、何をテストしているかが一目でわかります。
assertEquals(期待値, 実際の値) は、期待値と実際の値が等しければテスト成功、異なればテスト失敗となります。今回学んだアノテーションの活用例でもあります。
assertThrows(例外クラス, 処理) は、指定した処理が指定した例外を投げればテスト成功となります。calc.divide(10, 0) が ArithmeticException を投げることを確認しています。ラムダ式を使って処理を渡している点に注目してください。
mvn test を実行するとMavenがJUnitを呼び出し、@Test が付いたメソッドをすべて自動で実行します。Failures: 0 であればすべてのテストが成功しています。もし意図的にテストを失敗させたい場合は、たとえば assertEquals(999, calc.add(3, 5)) のように間違った期待値を書くと BUILD FAILURE と表示され、どのテストが失敗したかが詳しく表示されます。
まとめ
JUnit5とMavenを使うことで、メソッドが正しく動くかを自動でテストできるようになります。@Test でテストメソッドを定義し、assertEquals で期待値と実際の値を比較、assertThrows で例外が正しく投げられるかを確認するという基本の流れを覚えておきましょう。コードを修正するたびに mvn test を実行して、意図せずほかの機能を壊していないかを確認する習慣をつけると、品質の高いプログラムが作れるようになります。
2026/07/13(月) ぱんまる


コメント