【Java】junitを使用した単体テストの使い方

■概要

以下の処理を実装し、Junitを使用した単体テストを実装する。

・処理概要

  • 入力値が整数かを判定する処理
  • 入力値を3倍にして返す処理

・実装概要

  • Mavenプロジェクトで作成

■pom.xmlの設定

Junitはバージョン5系を使用するため、pom.xmlに以下の設定を追加する。

  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.3.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.3.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <version>1.0.1</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

■フローチャート

テスト対象のモジュールについて、フローチャートは以下の通り。

・入力値が整数かを判定する処理

開始
開始
入力値
入力値
null
null
false
false
try
try
整数判定
整数判定
catch
catch
例外エラー出力
例外エラー出力
false
false
true
true
終了
終了
Text is not SVG – cannot display

・入力値を3倍にして返す処理

開始
開始
入力値 * 3
入力値 * 3
終了
終了
Text is not SVG – cannot display

■サンプルコード

テスト対象のモジュールおよびJunitのサンプルコードを以下に示す。

・CheckNum3Multiplication.java

package com.unittestsample;

public class CheckNum3Multiplication {
	
	// 入力値が整数かを判定する処理
	public Boolean isCheckNumInt(String num) {
		
		// 入力値がnullか否か
		if (num == null) {
			return false;
		}
		
		try {
			// 整数判定
			Integer.parseInt(num);
		} catch (NumberFormatException e) {
			System.out.println("例外エラー:" + e);
			return false;
		}
		
		return true;
	}
	
	// 入力値を3倍にして返す処理
	public int multipicationThree(String num) {
		
		return Integer.parseInt(num) * 3;
		
	}
}

・CheckNum3MultiplicationTest.java

package com.unittestsample;


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

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class CheckNum3MultiplicationTest{
	
	private CheckNum3Multiplication cn3m;
	
	// コンストラクタ
	public CheckNum3MultiplicationTest() {
		cn3m = new CheckNum3Multiplication();
	}

	@BeforeAll
	static void setUpBeforeClass() throws Exception {
		System.out.println("=====テスト開始=====");
	}

	@AfterAll
	static void tearDownAfterClass() throws Exception {
		System.out.println("=====テスト終了=====");
	}
	
	@Test
	@DisplayName("入力値が整数か判定処理---正常系---")
	void isCheckNumIntTest1() {
		  String input_num = "10";  
		  		  
		  assertTrue(cn3m.isCheckNumInt(input_num));
	}
	
	@Test
	@DisplayName("入力値が整数か判定処理---異常系(null)---")
	void isCheckNumIntTest2() {
		  String input_num = null;  
		  		  
		  assertFalse(cn3m.isCheckNumInt(input_num));
	}
	
	@Test
	@DisplayName("入力値が整数か判定処理---異常系(整数ではない)---")
	void isCheckNumIntTest3() {
		  String input_num = "11.11";  
		  		  
		  assertFalse(cn3m.isCheckNumInt(input_num));
	}	
	
	@Test
	@DisplayName("入力値を3倍にして返す処理")
	void multipicationThreeTest() {
		  String input_num = "1";  
		  int ans_num = 3;
		  		  
		  assertEquals(cn3m.multipicationThree(input_num), ans_num);
	}

}

■実行結果

・コンソール

=====テスト開始=====
例外エラー:java.lang.NumberFormatException: For input string: "11.11"
=====テスト終了=====

・Juni結果

■参考

本処理を作成するにあたり、参考とさせていただいたURLを以下に示す。