JUnit5を使って、Javaの単体テストをする方法を書いていきます。JUnit5のアノテーションの役割も記載しています。
バージョン
動作確認で使用した製品のバージョンは以下の通りです。
目次
- ビルドファイルの作成
- テストクラスの作成
- テスト対象の作成
- テストの実行
- JUnit5のアノテーションについて
1. ビルドファイルの作成
Mavenのビルドファイルを作成して、JUnitへの依存関係を追加します。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>junit5-test</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.9.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M8</version>
</plugin>
</plugins>
</build>
</project>
maven-surefire-pluginが古いと、JUnit5のテストを実行してくれないことがあります。上のように、新しいバージョンを指定するのが良さそうです。
2. テストクラスの作成
Calcクラスのテストを行うコードを作成します。
src/test/java/org/example/CalcTest.java
package org.example; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; class CalcTest { private final Calc calc = new Calc(); @Test void testAdd() { // 実行 int result = calc.add(1, 2); // 検証 assertEquals(3, result); } }
3. テスト対象の作成
テスト対象のクラスは以下の通りです。
src/main/java/org/example/Calc.java
package org.example; public class Calc { public int add(int x, int y) { return x + y; } }
4. テストの実行
IDEでテストクラスを実行するか、プロジェクトのルートディレクトリで以下のコマンドを実行します。
mvn test
5. JUnit5のアノテーションについて
JUnit5のアノテーションについて、一部になりますが解説を記載します。
5.1. 概要
以下のアノテーションは、メソッドに付与します。
| アノテーション | 解説 |
|---|---|
| @Test | テスト対象になります。 |
| @BeforeEach | 各テストが実行される前に呼び出されます。 |
| @AfterEach | 各テストが実行された後に呼び出されます。 |
| @BeforeAll | 全てのテストが実行される前に呼び出されます。 |
| @AfterAll | 全てのテストが実行された後に呼び出されます。 |
@BeforeAll と @AfterAll のメソッドは static にします。
5.2. 使用例
アノテーションの使用例は以下の通りです。
src/test/java/org/example/ExampleTest.java
package org.example; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class ExampleTest { // 全てのテストが実行される前に実行 @BeforeAll static void beforeAll() { System.out.println("beforeAll"); } // 全てのテストが実行された後に実行 @AfterAll static void afterAll() { System.out.println("afterAll"); } // 各テストが実行される前に実行 @BeforeEach void beforeEach() { System.out.println("beforeEach"); } // 各テストが実行された後に実行 @AfterEach void afterEach() { System.out.println("afterEach"); } // テスト1 @Test void testOne() { System.out.println("test1"); } // テスト2 @Test void testTwo() { System.out.println("test2"); } }
5.3. 実行結果
上のテストクラスを実行すると、以下のように出力されます。
beforeAll beforeEach test1 afterEach beforeEach test2 afterEach afterAll