![見出し画像](https://assets.st-note.com/production/uploads/images/147182174/rectangle_large_type_2_5c58d809d148f71f94bb5c91a9463432.png?width=1200)
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");
}
}
実行結果:
![](https://assets.st-note.com/img/1720778297747-zkW92K4qRQ.png?width=1200)
@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):
![](https://assets.st-note.com/img/1720861657700-GoNs7KZNIJ.png?width=1200)
Mac環境で実行すると、
@DisabledOnOs(OS.WINDOWS)
@EnabledOnOs(OS.MAC)
のアノテーションがついたテストは実行され、
@Disabled
@DisabledOnOs(OS.MAC)
@EnabledOnOs(OS.WINDOWS)
のいずれかのアノテーションがついたテストがスキップされた。
2-2. 使用する際の注意
@DisabledOnOsや@EnabledOnOsは複数重ねることができないので注意。
(@DisabledOnOsと@EnabledOnOsを重ねることはできるが意味はなさそう…)
![](https://assets.st-note.com/img/1720879745155-MFPk6QqMq9.png?width=1200)
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):
![](https://assets.st-note.com/img/1720862621984-KEY3Ek72vT.png?width=1200)
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.) 実行ボタン右の下矢印をクリック
![](https://assets.st-note.com/img/1720864560461-aue4lafLS6.png)
2.) 実行の構成を選択
3.) JUnitをクリック
4.) 新規の起動構成
5.) 適当な名前をつける
6.) タグの包含/除外:の欄の構成…ボタンを押す
7.) include Tagsのチェックボタンを押し、実行したいタグにつけた名前を記入(今回はexecuteを入力)
8.) OK->適用->実行
![](https://assets.st-note.com/img/1720865193513-fqOgvs0bUq.png?width=1200)
実行結果:
![](https://assets.st-note.com/img/1720865413389-CGHxsDSbuB.png?width=1200)
executeタグをつけたテストのみ実行された。
Tagsアノテーションでまとめてなくても問題なく実行できた。
タグで実行するテストを設定すると、実行しないテストはスキップではなく、存在しないものとして扱われた。
4-2. 特定のタグのみ実行しない
実行の構成:
4-1の7.)でExclude Tagsのチェックボックスをクリックし、実行したくないタグにつけた名前を記入。(今回はunexecuteを入力)
実行結果:
![](https://assets.st-note.com/img/1720878390757-3CP9rp1rVq.png?width=1200)
unexecuteタグをつけたテスト以外実行された。
4-3. 特定のタグの中で実行するテストを絞る(4-1,2の組み合わせ)
実行の構成:
4-1の7.)でInclude Tags/Exclude Tagsの両方のチェックボックスをクリックし、実行したいテストにつけたタグ、実行したくないテストにつけたタグの名前を記入。(今回はそれぞれexecute、unexecuteを入力)
実行結果:
![](https://assets.st-note.com/img/1720878935910-hUllcPZ3Fh.png?width=1200)
executeのタグがついているが、unexecuteのタグがついていないテストのみ実行された。(Include TagsよりもExclude Tagsの方が優先された。)
4-4. なぜTagは複数重ねることができるか
@Tagは定義クラスで@Repeatableが付与されていることによって複数の使用が許可される。
![](https://assets.st-note.com/img/1720880389707-9sso7mMqgP.png?width=1200)