見出し画像

JUnit5 アノテーション(テスト名、スキップ、実行構成)



1. テスト名表示の変更(@DisplayName)

@DisplayName: テストの名前を設定する

package test;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class MainTest {
	
	@Test
	@DisplayName("テスト1")
	public void test1() {
		System.out.println("テスト1");
	}
	
	@Test
	public void test2() {
		System.out.println("テスト2");
	}
	
}

実行結果:

@DisplayNameをつける時だけ表示名が変わる。

2. OSによるテスト実行スキップ(@Disabled, @DisabledOnOs, @EnabledOnOs)

2-1. 使用例

@Disabled: テストをスキップする。
@DisabledOnOs: 特定のOSのテストをスキップする。
@EnabledOnOs: 特定のOSのテストのみを実行する。

package test;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnOs;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;

public class MainTest {
	
	@Test
	@DisplayName("テスト1")
	public void test1() {
		System.out.println("テスト1");
	}
	
	@Test
	@DisplayName("テスト2")
	@Disabled
	public void test2() {
		System.out.println("テスト2");
	}
	
	@Test
	@DisplayName("テスト3")
	@DisabledOnOs(OS.WINDOWS)
	public void test3() {
		System.out.println("テスト3");
	}
	
	@Test
	@DisplayName("テスト4")
	@DisabledOnOs(OS.MAC)
	public void test4() {
		System.out.println("テスト4");
	}
	
	@Test
	@DisplayName("テスト5")
	@EnabledOnOs(OS.WINDOWS)
	public void test5() {
		System.out.println("テスト5");
	}
	
	@Test
	@DisplayName("テスト6")
	@EnabledOnOs(OS.MAC)
	public void test6() {
		System.out.println("テスト6");
	}
}

実行結果(Mac):

Mac環境で実行すると、
@DisabledOnOs(OS.WINDOWS)
@EnabledOnOs(OS.MAC)
のアノテーションがついたテストは実行され、
@Disabled
@DisabledOnOs(OS.MAC)
@EnabledOnOs(OS.WINDOWS)
のいずれかのアノテーションがついたテストがスキップされた。


2-2. 使用する際の注意

@DisabledOnOsや@EnabledOnOsは複数重ねることができないので注意。
(@DisabledOnOsと@EnabledOnOsを重ねることはできるが意味はなさそう…)


3. JREによるテスト実行スキップ(@Disabled, @DisabledOnJre, @EnabledOnJre)

3-1. 使用例

@DisabledOnJre: 特定のJREのテストをスキップする。
@EabledOnJre: 特定のJREのテストのみを実行する。

package test;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnJre;
import org.junit.jupiter.api.condition.EnabledOnJre;
import org.junit.jupiter.api.condition.JRE;

public class MainTest {
	
	@Test
	@DisplayName("テスト1")
	public void test1() {
		System.out.println("テスト1");
	}
	
	@Test
	@DisplayName("テスト2")
	@Disabled
	public void test2() {
		System.out.println("テスト2");
	}
	
	@Test
	@DisplayName("テスト3")
	@DisabledOnJre(JRE.JAVA_17)
	public void test3() {
		System.out.println("テスト3");
	}
	
	@Test
	@DisplayName("テスト4")
	@DisabledOnJre(JRE.JAVA_21)
	public void test4() {
		System.out.println("テスト4");
	}
	
	@Test
	@DisplayName("テスト5")
	@EnabledOnJre(JRE.JAVA_17)
	public void test5() {
		System.out.println("テスト5");
	}
	
	@Test
	@DisplayName("テスト6")
	@EnabledOnJre(JRE.JAVA_21)
	public void test6() {
		System.out.println("テスト6");
	}
}

実行結果(JavaSE-21):

JAVA_21の環境で実行すると、
@DisabledOnJre(JRE.JAVA_17)
@EnabledOnJre(JRE.JAVA_21)
のアノテーションがついたテストは実行され、
@Disabled
@DisabledOnJre(JRE.JAVA_21)
@EnabledOnJre(JRE.JAVA_17)
のいずれかのアノテーションがついたテストがスキップされた。

3-2. 使用する際の注意

@DisabledOnJreと@EnabledOnJreも重ねて使うことができない。
@DisabledOnOsや@EnabledOnOsと重ねることはできるので、特定のOSの特定のJREでのみ実行することはできる。


4. 自由なテスト実行構成の作成(@Tag, @Tags)

@Tag: つけたタグを用いて実行するテストを選択することができる。
@Tags: 複数のタグをまとめることができる。

ソースコード:

package test;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Tags;
import org.junit.jupiter.api.Test;

public class MainTest {
	
	@Test
	@DisplayName("テスト1")
	public void test1() {
		System.out.println("テスト1");
	}
	
	@Test
	@DisplayName("テスト2")
	@Tag("execute")
	public void test2() {
		System.out.println("テスト2");
	}
	
	@Test
	@DisplayName("テスト3")
	@Tag("unexecute")
	public void test3() {
		System.out.println("テスト3");
	}
	
	@Test
	@DisplayName("テスト4")
	@Tags({
		@Tag("execute"),
		@Tag("unuseTag"),
		})
	public void test4() {
		System.out.println("テスト4");
	}
	
	@Test
	@DisplayName("テスト5")
	@Tags({
		@Tag("unexecute"),
		@Tag("unuseTag"),
		})
	public void test5() {
		System.out.println("テスト5");
	}
	
	@Test
	@DisplayName("テスト6")
	@Tag("execute")
	@Tag("unuseTag")
	public void test6() {
		System.out.println("テスト6");
	}
	
	@Test
	@DisplayName("テスト7")
	@Tag("unexecute")
	@Tag("unuseTag")
	public void test7() {
		System.out.println("テスト7");
	}
	
	@Test
	@DisplayName("テスト8")
	@Tags({
		@Tag("execute"),
		@Tag("unexecute")
		})
	public void test8() {
		System.out.println("テスト8");
	}
	
	@Test
	@DisplayName("テスト9")
	@Tag("execute")
	@Tag("unexecute")
	public void test9() {
		System.out.println("テスト9");
	}
}


4-1. 特定のタグのみ実行

実行の構成:
1.) 実行ボタン右の下矢印をクリック

2.) 実行の構成を選択
3.) JUnitをクリック
4.) 新規の起動構成
5.) 適当な名前をつける
6.) タグの包含/除外:の欄の構成…ボタンを押す
7.) include Tagsのチェックボタンを押し、実行したいタグにつけた名前を記入(今回はexecuteを入力)
8.) OK->適用->実行

実行結果:

executeタグをつけたテストのみ実行された。
Tagsアノテーションでまとめてなくても問題なく実行できた。
タグで実行するテストを設定すると、実行しないテストはスキップではなく、存在しないものとして扱われた。


4-2. 特定のタグのみ実行しない

実行の構成:
4-1の7.)でExclude Tagsのチェックボックスをクリックし、実行したくないタグにつけた名前を記入。(今回はunexecuteを入力)

実行結果:

unexecuteタグをつけたテスト以外実行された。


4-3. 特定のタグの中で実行するテストを絞る(4-1,2の組み合わせ)

実行の構成:
4-1の7.)でInclude Tags/Exclude Tagsの両方のチェックボックスをクリックし、実行したいテストにつけたタグ、実行したくないテストにつけたタグの名前を記入。(今回はそれぞれexecute、unexecuteを入力)

実行結果:

executeのタグがついているが、unexecuteのタグがついていないテストのみ実行された。(Include TagsよりもExclude Tagsの方が優先された。)


4-4. なぜTagは複数重ねることができるか

@Tagは定義クラスで@Repeatableが付与されていることによって複数の使用が許可される。


この記事が気に入ったらサポートをしてみませんか?