Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

Java JUnit5で単体テストをする方法(ユニットテスト)

JUnit5を使って、Java単体テストをする方法を書いていきます。JUnit5のアノテーションの役割も記載しています。

バージョン

動作確認で使用した製品のバージョンは以下の通りです。

目次

  1. ビルドファイルの作成
  2. テストクラスの作成
  3. テスト対象の作成
  4. テストの実行
  5. 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