Spring5 テストとモックを使用する(Mockito)

Spring5のテストとモックでテストするサンプルです。Mockitoを使用します。
確認環境(Spring 5.3.7、Java11、STS 4)

目次 Spring5 テストとモックでテスト(Mockito)概要
  1.起動するクラス(MainController.java)
  2.設定クラス(AppConfig.java)
  3.beanとテストコード(Syain,SyainTest,SyainTest2)
  実行する
  pom.xml

Spring5 テストとモックでテスト(Mockito)概要

今回作成したファイルです。

処理の流れ

・Syainはテスト対象のクラスです。
・SyainTestは、JUnitのテストコードです。
・SyainTest2は、Mockitoでモックを作成して確認するテストコードです。

githubにコードがあります。
https://github.com/ut23405/spring5/tree/master/spring5-test-mockito

1.起動するクラス(MainController.java)

package com.example.test1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainController {
	public static void main(String[] args) {

		AnnotationConfigApplicationContext context = 
				new AnnotationConfigApplicationContext(AppConfig.class);

		Syain syain = context.getBean(Syain.class);

		System.out.println(syain.getHello("a")); //aさん、こんにちは
		context.close();
	}
}

9行目は、設定ファイルからDIコンテナを生成しています。
11行目は、context.getBeanでDIコンテナからbean(インスタンス)を取得しています。

2.設定クラス(AppConfig.java)

package com.example.test1;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {
	@Bean
	Syain syain() {
		return new Syain();
	}
}

@Configurationは、設定クラスであることを示しています。
8行目は、@Bean定義です。インスタンスを生成して返すメソッドを作成します。
JavaベースConfigurationです。

3.beanとテストコード(Syain,SyainTest,SyainTest2)

Syain.java

package com.example.test1;

public class Syain {
	public String getHello(String a) {
		if (a == null){
			return "nullです";
		}else {
			return a + "さん、こんにちは";	
		}
	}
}

引数で文字列を受け取り文字列を返します。

SyainTest.java

テストコードです。

package com.example.test1;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.junit.Test;

public class SyainTest {
	@Test
	public void test1() {
		Syain s1 = new Syain();
		String msg = s1.getHello("a");
		assertThat(msg,is("aさん、こんにちは"));
	}
	@Test
	public void test2() {
		Syain s1 = new Syain();
		String msg = s1.getHello(null);
		assertThat(msg,is("nullです"));
	}
}

テストを行うメソッドごとに@Testアノテーションをつけます。

assertThatの構文は以下のとおりです。

assertThat(実際の値,is(期待の値))

SyainTest2.java

Mockitoでモックを作成しています。

package com.example.test1;

import org.junit.Test;
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

public class SyainTest2 {

	@Test
	public void test1() {
		//モックを作成
		Syain s1 = mock(Syain.class);
		
		s1.getHello("b");
		verify(s1).getHello("b");
		
		// スタブを作成
		when(s1.getHello("b")).thenReturn("bさんですね");

		String t1 = s1.getHello("b");
		assertThat(t1,is("bさんですね"));
	}
	@Test
	public void test2() {
		Syain s1 = mock(Syain.class);
		
		when(s1.getHello(null)).thenReturn("nullですよ");

		String t1 = s1.getHello(null);
		assertThat(t1,is("nullですよ"));
	}
}

13,26行目は、mockでSyainクラスのモックを作成します。
16行目は、verifyで引数が「b」であることを確認しています。引数が異なっているとエラーになります。

19,28行目は、whenでスタブを作成しています。getHelloメソッドの引数が指定の値の場合、thenReturnの引数の値が戻ります。

実行する

SyainTest.javaまたはSyainTest2.javaを右クリックして「実行」→「JUnitのテスト」をクリックするとテストが実行されます。

テストの結果が想定どうりの場合は、緑色の帯が表示され、失敗は0で表示されます。

pom.xml

設定したライブラリです。

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.3.7</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<version>3.11.2</version>
		</dependency>

関連の記事

Spring5 使用するBeanを指定する(@Qualifier)

△上に戻る