1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

STSでJUnit5を動かす

Last updated at Posted at 2021-04-11

概要

STSでJUnit5を使ってみます。
主に自分用備忘録。

JUnit5とは、Javaテスト用フレームワークJUnitの最新バージョンです。
STSについては後述で紹介記事へリンクを貼ります。

開発環境は次の通りです。
OS : Windows 7 Home Edition 64bit
Java : JavaSE 15
STS : 4.10.0

STSのセットアップ

こちらからダウンロード、4.10.0 - WINDOWS 64-BITを使用しました。
4.10.0はjar形式で提供されていて、
解凍はダブルクリックで、sts-4.10.0-RELEASEフォルダが作成されます。
その後のセットアップは自分の備忘録を参考にしました。
「STSって何?」という方もよろしければご覧ください。

この記事ではSTSのフォルダをc:\sts-4.10.0にしています。

プロジェクトの作成

STSを起動して、下記のCreate new Spring Starter Projectをクリックします。
1.CreateNewSpringProject.PNG

プロジェクトの設定をします。
デフォルト(初期値)から変更した箇所はJava Versionのみです。
2.SetNewSpringStarterProject.PNG

Spring Bootのライブラリ参照を設定します。
デフォルトからSpring Bootのバージョンを2.4.4にしています。
2.5.PNG

注意点:JUnit5をこの段階でライブラリ参照設定できません。

site infoを設定、変更無しです。
image.png

プロジェクトができました。
!3.NewProject.PNG

Unit5を参照する方法

まず、参照するライブラリとして追加します。参考記事はこちら
Maven Repositoryを検索して、2021/4/11時点で最新バージョン5.7.1
pom.xmlに以下を追記します。

pom.xml(JUnit5のみ)
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.7.1</version>
    <scope>test</scope>
</dependency>

追記する箇所ですが、pom.xmlの<dependencies>タグ内です。
pom.xmlはSTSでプロジェクト作成した際に自動生成されています。
追記するとこうなります。

pom.xml(参照を追記した後)
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>15</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!-- ここから追記 -->
		<!--  https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
		<dependency>
		    <groupId>org.junit.jupiter</groupId>
		    <artifactId>junit-jupiter</artifactId>
		    <version>5.7.1</version>
		    <scope>test</scope>
		</dependency>
		<!-- ここまで追記 -->

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

参照ライブラリをダウンロードします。
プロジェクトルートを選択、右クリック->Maven->Update projectをクリック
5.PNG

OKボタンをクリック、アップデートを開始します。
image.png

JUnit5参照ができましたが、参照しているJREがJavaSE-15になっているため、修正します。
2021/4/11時点ではSTSにJavaSE 16がバンドル(同梱)されていないためです。

STSにバンドルされていないJREを指定する方法

※下記の方法はSTSのworkspaceのJREを指定する方法です。
手順をご存知の方は読み飛ばして、次の段落からご覧ください。

JRE System Libraryを右クリック->Build Path->Configure Build Path...を選択します。
4.PNG

JRE System Libraryをクリック、Editボタンをクリックします。
image.png

Installed JREsボタンをクリックします。
image.png

Addボタンをクリックします。
image.png

Standard VMをクリック、Nextボタンをクリックします。
image.png

JRE home:のDirectoryボタンをクリックします。
image.png

JavaSE 16のインストールディレクトリ
(デフォルトだとC:\Program Files\Java\jdk-16)を選択します。
ライブラリが表示されたら、Finishボタンをクリックします。
image.png

jdkの方をチェックして、Apply and Closeボタンをクリックします。
image.png

ラジオボタンでAlternative JREを選択、
ドロップダウンからjdk-16を選択、
Finishボタンをクリックします。
参照するJREを変更できました。
image.png

詰まっている箇所

JRE参照ライブラリを切り替えてからMavenのUpdate Projectを実行したところ、
JavaSE 15にリセットされました。
色々調べた結果、spring-boot-maven-pluginの本家を確認しましたが、
記事初版投稿時点(2021/4/11)ではJavaSE 15で試しています。
他にもmaven-compiler-plugin関連ではありますが、
こちらとか、こちらも拝見しました。

Lombokをインストールする

ボイラープレートを書かないようにするため、
Lombok本家セットアップ手順を見ながら、
Lombokをインストールします。

テスト対象を作る

テスト対象はシンプルで確実な答えがあるものにしたかったので、
フィボナッチ数を指定した数だけ計算、配列として保持するクラスを用意しました。

FibonacciNumberCreator.java
package com.example.demo;

import lombok.Data;

/**
 * フィボナッチ数を作成するクラス
 * 
 * @author harayoshi
 */
@Data
public class FibonacciNumberCreator {

	private final int[] atFirstArray = {0, 1};
	private final String messateTemplate = "F%s = %s\r\n";

	/** フィボナッチ数のリスト */
	private int[] fibonacciNumbers;

	/**
	 * コンストラクタ(フィボナッチ数のリスト作成)
	 * 
	 * @param size
	 */
	public FibonacciNumberCreator(int size) {

		// サイズが負の数の場合、リストの最小デフォルト値を設定
		if (size < 0) {
			size = atFirstArray.length;
		}

		// 1,2番目をリストに格納
		fibonacciNumbers = new int[size];
		for (int i = 0; i < atFirstArray.length; i++) {
			fibonacciNumbers[i] = atFirstArray[i];
		}
		
		// 3番目以降を計算、リストに格納
		for (int i = 2; i < size; i++) {
			int next = fibonacciNumbers[i - 2] + fibonacciNumbers[i - 1];
			fibonacciNumbers[i] = next;
		}
	}

	/**
	 * インスタンスが持つリストをテンプレートを使って文字列化
	 */
	@Override
	public String toString() {
		String message = "";
		// 要素ごとにメッセージを追記
		for (int i = 0; i < this.getFibonacciNumbers().length; i++) {
			message += String.format(messateTemplate, String.valueOf(i), String.valueOf(this.getFibonacciNumbers()[i]));
		}
		return message;
	}

}

このクラスに対してJUnit5のテストケースを作成します。
テスト対象クラスを右クリック->New->JUnit Test Case
6.PNG

Which method stubs would you like to create?は全てチェック有りにして、
Nextボタンをクリックします。
ちなみに、JUnitのバージョンはデフォルトで選択状態でした。
image.png

テスト対象メソッドを選択して、Finishボタンをクリックします。
image.png

クラスが作成されました。

FibonacciNumberCreatorTest.java
package com.example.demo;

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

import java.util.Arrays;
import java.util.List;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class FibonacciNumberCreatorTest {

	private FibonacciNumberCreator creator;
	
	@BeforeAll
	static void setUpBeforeClass() throws Exception {
	}

	@AfterAll
	static void tearDownAfterClass() throws Exception {
	}

	@BeforeEach
	void setUp() throws Exception {
	}

	@AfterEach
	void tearDown() throws Exception {
	}

	@Test
	void testToString() {
		fail("Not yet implemented");
	}

}

クラスを作成する前に正解となるフィボナッチ数列をこちら確認しました。

クラスは次の通りに書き換えました。

FibonacciNumberCreatorTest.java
package com.example.demo;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class FibonacciNumberCreatorTest {

	private FibonacciNumberCreator creator;
	
	@BeforeAll
	static void setUpBeforeClass() throws Exception {
		// no implements
	}

	@AfterAll
	static void tearDownAfterClass() throws Exception {
		// no implements
	}

	@BeforeEach
	void setUp() throws Exception {
		// no implements
	}

	@AfterEach
	void tearDown() throws Exception {
		creator = null;
	}

	@Test
	void testToString() {
		int size = 4;
		creator = new FibonacciNumberCreator(size);
		int[] expected = {0, 1, 1, 2};
		int[] actual = creator.getFibonacciNumbers();
		Assertions.assertArrayEquals(expected, actual);
	}

}

テスト実行時はテストクラスを右クリック->Run As->JUnit Testをクリックします。
6.5.PNG

テスト元クラスを確認するダイアログが表示されますが、
そのままOKボタンをクリックします。

テストできました。
7.PNG

結論

簡単なプログラム、テストのみでの確認ですが、今回分かったのは
STSは「JUnitのバージョンに合わせて、JUnit5でもこれまでと同じ手順でテスト実行できる」
ということです。

最後まで読んでいただき、ありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?