Junit5ã®ä½¿ãæ¹
Junit5ã®æ¸ãæ¹
org.junit.jupiter
ããã±ã¼ã¸ã®ã¢ããã¼ã·ã§ã³ã¨ã¯ã©ã¹ã使ç¨ããã
ãã¹ãã¡ã½ãã
@Test
ãä»ä¸ããã¡ã½ããã¯ããã¹ã宿½ã®å¯¾è±¡ã¨ãªãã
import org.junit.jupiter.api.Test; class SampleTest { @Test public void sample_æ¤è¨¼å 容() { // ... } }
ãã¹ãã®åå¦çã»å¾å¦ç
ãã¹ãã¡ã½ããå®è¡ã®åå¾ã«è¡ãããå¦çãè¨è¿°ãããã¨ãåºæ¥ãã
@BeforeAll
å
¨ã¦ã®ãã¹ãã®å®è¡åã«1度ã ãè¡ãå¦çãè¨è¿°ããã
ã¡ã½ããã¯å¼æ°ã»æ»ãå¤ç¡ãã§ãstatic
ã§å®ç¾©ããã
@BeforeEach
ãã¹ãã¡ã½ããå®è¡åã«æ¯åè¡ãå¦çãè¨è¿°ãããã¨ãåºæ¥ãã
ã¡ã½ããã¯å¼æ°ã»æ»ãå¤ç¡ãã§ãã¤ã³ã¹ã¿ã³ã¹ã¡ã½ããã§å®ç¾©ããã
@AfterEach
ãã¹ãã¡ã½ããå®è¡å¾ã«æ¯åè¡ãå¦çãè¨è¿°ãããã¨ãåºæ¥ãã
ã¡ã½ããã¯å¼æ°ã»æ»ãå¤ç¡ãã§ãã¤ã³ã¹ã¿ã³ã¹ã¡ã½ããã§å®ç¾©ããã
@AfterAll
å
¨ã¦ã®ãã¹ãã®å®è¡å¾ã«1度ã ãè¡ãå¦çãè¨è¿°ããã
ã¡ã½ããã¯å¼æ°ã»æ»ãå¤ç¡ãã§ãstatic
ã§å®ç¾©ããã
import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class SampleTest { @BeforeAll static void beforeAll() { // ãã¹ãã¯ã©ã¹å ã§ä¸çªæåã«ä¸åº¦ã ãå®è¡ããã } @BeforeEach void beforeEach() { // å ¨ã¦ã®ãã¹ãã®å®è¡åã«å®è¡ããã } @Test public void sample_æ¤è¨¼å 容() { // ... } @AfterEach void afterEach() { // åãã¹ãã¡ã½ããå®è¡å¾ã«å®è¡ããã } @AfterAll static void afterAll() { // å ¨ã¦ã®ãã¹ãå®è¡å¾ã«ä¸åº¦ã ãå®è¡ããã } }
ãã¹ããããã¹ã
å
é¨ã¯ã©ã¹ã«@Nested
ãä»ä¸ãããã¨ã§ãéstatic ãªå
é¨ã¯ã©ã¹ãå
¥ãåã«ãããã¨ãåºæ¥ãã
ãã¹ãã¡ã½ããã®æ°ãå¤ãå ´åãªã©ã«ããã¦ããã¹ãã®åé¡ãããã®ã«ä½¿ç¨ãããã
ãã¹ãããã¯ã©ã¹åä½ã§ã®ãã¹ãå®è¡ãå¯è½ã
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; class SampleTest { @BeforeEach void beforeEach() { //... } @Test public void sample_æ¤è¨¼å 容() { // ... } @AfterEach void afterEach() { //... } @Nested class NestedTest { @BeforeEach void beforeEach() { //... } @Test void nested_æ¤è¨¼å 容() { //... } @AfterEach void afterEach() { //... } } @Nested class NestedTest2 { @Test void test() { //... } } }
ä¸è¨ã®ããã«ãã¹ãã¯ã©ã¹ã¨å
é¨ã¯ã©ã¹ã«ãããã@BeforeEach
ã@AfterEach
ãä»ä¸ããã¡ã½ãããå®ç¾©ããã¦ããå ´åã以ä¸ã®é çªã§ã¡ã½ãããå®è¡ãããã
- SampleTest.beforeEach()
- NestedTest.beforeEach()
- NestedTest.nested_æ¤è¨¼å 容()
- NestedTest.afterEach()
- SampleTest.afterEach()
ãã¹ãããã¯ã©ã¹ã§@BeforeAll
ã@AfterAll
ã使ç¨ããã«ã¯
å
é¨ã¯ã©ã¹ã¯éstaticã§ããå¿
è¦ããããããstaticã¡ã½ããã¨ãã¦å®ç¾©ããå¿
è¦ã®ãã@BeforeAll
ã@AfterAll
ãå©ç¨ãããã¨ã¯ã§ããªãã
â ãã¹ãã¤ã³ã¹ã³ã¿ã³ã¹ã®ã©ã¤ããµã¤ã¯ã«ã®æå®ã§PER_CLASS
ãè¨å®ããå¿
è¦ãããã
è¨å®ã追å ãããã¨ã§ãå
é¨ã¯ã©ã¹ã§å®ç¾©ãã@BeforeAll
ã@AfterAll
ã®ã¡ã½ããã«éãã¤ã³ã¹ã¿ã³ã¹ã¡ã½ããã¨ãã¦å®ç¾©ã§ããããã«ãªãã
import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; class SampleTest { @BeforeAll static void beforeAll() { //... } @BeforeEach void beforeEach() { //... } @AfterEach void afterEach() { //... } @AfterAll static void afterAll() { //... } @Nested @TestInstance(TestInstance.Lifecycle.PER_CLASS) class NestedTest { @BeforeAll void beforeAll() { //... } @BeforeEach void beforeEach() { //... } @Test void nested_æ¤è¨¼å 容1() { //... } @Test void nested_æ¤è¨¼å 容2() { //... } @AfterEach void afterEach() { //... } @AfterAll void afterAll() { //... } } }
ä¸è¨ã®ããã«åå¦çã»å¾å¦çã¨ãã¹ãã¡ã½ãããå®ç¾©ããå ´åã¯ã以ä¸ã®é çªã§å¦çãå®è¡ãããã
- SampleTest.beforeAll()
- NestedTest.beforeAll()
- SampleTest.beforeEach()
- NestedTest.beforeEach()
- NestedTest.nested_æ¤è¨¼å 容1()
- NestedTest.afterEach()
- SampleTest.afterEach()
- SampleTest.beforeEach()
- NestedTest.beforeEach()
- NestedTest.nested_æ¤è¨¼å 容2()
- NestedTest.afterEach()
- SampleTest.afterEach()
- NestedTest.afterAll()
- SampleTest.afterAll()
åææ¡ä»¶ã®æå®
ãã¹ãã¡ã½ããå ã§ç¹å®ã®æ¡ä»¶ã«åè´ããå ´åã®ã¿ãã¹ããç¶è¡ããããå¦çãå®è¡ãããããã®ã«ä½¿ç¨ããã
Assumptions.assumeTrue(boolean)
弿°ã« true ãæ¸¡ãããå ´åã®ã¿ç¶ãã®ãã¹ããå®è¡ãããã
弿°ã false ã ã£ãå ´åã¯ããã®ãã¹ãã¡ã½ããå
ã®æ®ãã®å¦çã¯ä¸æãããã
䏿ããããã¹ã㯠successful ã§ã failed ã§ããªãã aborted ã¨ããç¶æ
ã¨ãªãã
Assumptions.assumingThat(boolean, Executable)
第1弿°ã®å¤ã true ã®å ´åã®ã¿ç¬¬2弿°ã§æ¸¡ããå¦çãå®è¡ãããã
import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; class SampleTest { @Test void test_æ¤è¨¼å 容1() { Assumptions.assumeTrue(true); // 以éã®å¦çã¯å®è¡ããã } @Test void test_æ¤è¨¼å 容2() { Assumptions.assumeTrue(false); // 以éã®å¦çã¯å®è¡ãããªã } @Test void test_æ¤è¨¼å 容3() { Assumptions.assumingThat(true, () -> { // 第2弿°ã§æ¸¡ããå¦çãå®è¡ããã }); // 以éã®å¦çã¯å®è¡ããã } @Test void test_æ¤è¨¼å 容4() { Assumptions.assumingThat(false, () -> { // 第2弿°ã§æ¸¡ããå¦çãå®è¡ãããªã }); // 以éã®å¦çã¯å®è¡ããã } }
ãã¹ãã®ç¡å¹å
@Disabled
ãä»ä¸ãããã¹ãã¡ã½ããã¯å®è¡ãããªããªãã
ã¯ã©ã¹ã«ä»ä¸ããå ´åã¯ããã¹ãã¯ã©ã¹å
ã®å
¨ãã¹ãã¡ã½ãããå®è¡ãããªããªãã
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; class SampleTest { @Test void sample_æ¤è¨¼å 容1() { // å®è¡ããããã¹ãã¡ã½ãã } @Test @Disabled void sample_æ¤è¨¼å 容2() { // å®è¡ãããªããã¹ãã¡ã½ãã } }
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @Disabled class SampleTest { @Test void sample_æ¤è¨¼å 容1() { // ã¯ã©ã¹ã«@Disabledãä»ä¸ããã¦ãããããå®è¡ãããªããã¹ãã¡ã½ãã } @Test void sample_æ¤è¨¼å 容2() { // ã¯ã©ã¹ã«@Disabledãä»ä¸ããã¦ãããããå®è¡ãããªããã¹ãã¡ã½ãã } }
æ¡ä»¶ä»ããã¹ã(OS)
@EnabledOnOs
ç¹å®ã® OS ã§ã®ãã¹ãå®è¡ãæå¹ããã
@DisabledOnOs
ç¹å®ã® OS ã§ã®ãã¹ãå®è¡ãç¡å¹ã«ããã
弿°ã«ã¯ OS (org.junit.jupiter.api.condition.OS
) ã§å®ç¾©ããã宿°ãæå®ããã
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; class SampleTest { @Test @EnabledOnOs(OS.WINDOWS) void sample_æ¤è¨¼å 容1() { // Windowsç°å¢ã§ã®ã¿å®è¡ããããã¹ãã¡ã½ãã } @Test @DisabledOnOs(OS.WINDOWS) void sample_æ¤è¨¼å 容2() { // Windowsç°å¢ã§ã®ã¿å®è¡ãããªããã¹ãã¡ã½ãã } }
æ¡ä»¶ä»ããã¹ã(Javaãã¼ã¸ã§ã³)
@EnabledOnJre
ç¹å®ã® Java ãã¼ã¸ã§ã³ã®ã¿ã§ãã¹ãå®è¡ãæå¹ã«ããã
@DisabledOnJre
ç¹å®ã® Java ãã¼ã¸ã§ã³ã§ã®ãã¹ãå®è¡ãç¡å¹ã«ããã
弿°ã«ã¯ JRE (org.junit.jupiter.api.condition.JRE
) ã§å®ç¾©ããã宿°ãæå®ããã
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; class SampleTest { @Test @EnabledOnJre(JRE.JAVA_11) void sample_æ¤è¨¼å 容1() { // Java11ç°å¢ã§ã®ã¿å®è¡ããããã¹ãã¡ã½ãã } @Test @DisabledOnJre(JRE.JAVA_11) void sample_æ¤è¨¼å 容2() { // Java11ç°å¢ã§ã®ã¿å®è¡ãããªããã¹ãã¡ã½ãã } }
æ¡ä»¶ä»ããã¹ã(ã·ã¹ãã ããããã£)
@EnabledIfSystemProperty
ã·ã¹ãã ããããã£ã®å¤ãæ¡ä»¶ã«ãã¦ãã¹ãå®è¡ãæå¹ã«ããã
@DisabledIfSystemProperty
ã·ã¹ãã ããããã£ã®å¤ãæ¡ä»¶ã«ãã¦ãã¹ãå®è¡ãç¡å¹ã«ããã
屿§ named
ï¼æ¡ä»¶ã«ãããã·ã¹ãã ããããã£ã®ååãæå®ãã
屿§ matches
ï¼æ¡ä»¶ã¨ãªãå¤ãæ£è¦è¡¨ç¾ã§æå®ããï¼å®å
¨ä¸è´ï¼
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIfSystemProperty; import org.junit.jupiter.api.condition.EnabledIfSystemProperty; class SampleTest { @Test @EnabledIfSystemProperty(named = "java.vendor", matches = "AdoptOpenJDK") void sample_æ¤è¨¼å 容1() { // AdoptOpenJDKã®Javaç°å¢ã§ã®ã¿å®è¡ããããã¹ãã¡ã½ãã } @Test @DisabledIfSystemProperty(named = "java.vendor", matches = "AdoptOpenJDK") void sample_æ¤è¨¼å 容2() { // AdoptOpenJDKã®Javaç°å¢ã§ã®ã¿å®è¡ãããªããã¹ãã¡ã½ãã } }
æ¡ä»¶ä»ããã¹ã(ç°å¢å¤æ°)
@EnabledIfEnvironmentVariable
ç°å¢å¤æ°ã®å¤ãæ¡ä»¶ã«ãã¦ãã¹ãå®è¡ãæå¹ã«ããã
@DisabledIfEnvironmentVariable
ç°å¢å¤æ°ã®å¤ãæ¡ä»¶ã«ãã¦ãã¹ãå®è¡ãç¡å¹ã«ããã
屿§named
ï¼æ¡ä»¶ã«ãããç°å¢å¤æ°ã®ååãæå®ãã
屿§ matches
ï¼æ¡ä»¶ã¨ãªãå¤ãæ£è¦è¡¨ç¾ã§æå®ããï¼å®å
¨ä¸è´ï¼
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; class SampleTest { @Test @EnabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\zulu-11-azure-jdk_11.*") void sample_æ¤è¨¼å 容1() { // ç°å¢å¤æ°JAVA_HOMEã«ãZulu11ãè¨å®ããã¦ããç°å¢ã§ã®ã¿å®è¡ããããã¹ãã¡ã½ãã } @Test @DisabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\zulu-11-azure-jdk_11.*") void sample_æ¤è¨¼å 容2() { // ç°å¢å¤æ°JAVA_HOMEã«ãZulu11ãè¨å®ããã¦ããç°å¢ã§ã®ã¿å®è¡ãããªããã¹ãã¡ã½ãã } }
ãã使ãã¢ãµã¼ã·ã§ã³
fail
ãã¹ãã失æãããæã«ä½¿ç¨ããã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.fail; class SampleTest { @Test void sample_æ¤è¨¼å 容() { try { // ... } catch (Exception e) { fail("ä¾å¤ãçºçããã失æã¨ãã", e); } } }
assertTrue, assertFalse
çå½å¤ã®ç¢ºèªã«ä½¿ç¨ããã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertTrue; import static org.assertj.core.api.Assertions.assertFalse; class SampleTest { @Test void sample_æ¤è¨¼å 容() { String sample = ""; assertTrue(sample.isEmpty()); sample = "sample"; assertFalse(sample.isEmpty()); } }
assertNull, assertNotNull
nullæ¯è¼ã«ä½¿ç¨ããã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertNull; import static org.assertj.core.api.Assertions.assertNotNull; class SampleTest { @Test void sample_æ¤è¨¼å 容() { String sample = null; assertNull(sample ); sample = "sample"; assertNotNull(sample); } }
assertEquals, assertNotEquals
ç夿¯è¼ã«ä½¿ç¨ããã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertEquals; import static org.assertj.core.api.Assertions.assertNotEquals; class SampleTest { @Test void sample_æ¤è¨¼å 容_æååã®å ´å() { String sample = "sample"; assertEquals("sample", sample.toLowerCase()); assertNotEquals("sample" , sample.toUpperCase()); } @Test void sample_æ¤è¨¼å 容_æµ®åå°æ°ç¹ã®å ´å() { // æµ®åå°æ°ç¹ã¯å®å ¨ä¸è´ããã¨ã¯éããªãã®ã§ã第3弿°ã§ä¸è´ããç¯å²ï¼deltaï¼ãæå®ãã assertEquals(0.333f, 1 / 3f, 0.001f); // float assertEquals(0.333d, 1 / 3d, 0.001d); // double } }
assertArrayEquals
é åã®è¦ç´ æ¯è¼ã«ä½¿ç¨ããã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertArrayEquals; class SampleTest { @Test void sample_æ¤è¨¼å 容() { int[] expected = { 1, 2, 3 }; int[] actual = { 1, 2, 3 }; assertArrayEquals(expected, actual); } }
assertIterableEquals
ãªã¹ãï¼Iterableï¼ã®è¦ç´ æ¯è¼ã«ä½¿ç¨ããã
assertEqualsã§ãæ¯è¼ã§ããããä¸ä¸è´ã ã£ãå ´åã«assertIterableEqualsã使ç¨ãã¦ããå ´åã¯ãä¸ä¸è´ã ã£ãè¦ç´ ãã表示ãããã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertIterableEquals; import java.util.Arrays; class SampleTest { @Test void sample_æ¤è¨¼å 容() { List<String> expected = Arrays.asList("a", "b", "c"); List<String> actual = Arrays.asList("a", "b", "c"); assertIterableEquals(expected, actual); } }
assertLinesMatch
è¤æ°è¡ã«ãããã¡ãã»ã¼ã¸ï¼ã¹ã¿ãã¯ãã¬ã¼ã¹ã¨ããã°ã¡ãã»ã¼ã¸ï¼ã®æ¯è¼ã«ä½¿ç¨ããã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertLinesMatch; import java.util.Arrays; class SampleTest { @Test void sample_æ¤è¨¼å 容() { // assertLinesMatchã¯ãåºæ¬çã«ã¯List<String>ã®æ¯è¼ã«ä½¿ç¨ããã // ã¾ããæå¾ å¤ã®æ¹ã«ã¯æ£è¦è¡¨ç¾çãæå®å¯è½(ã\\d+msããã.{3}ããªã©) // ã>> >>ãã¯ã次ã®ãã¼ã¿ããããããã¾ã§ã¹ããããã // ã>> skip >>ãã®ããã«éã«æååãæ¸ããå ´åã¯ã³ã¡ã³ãæ±ãã§ç¡è¦ããããã // ã>> 3 >>ãã®ããã«æ°å¤ãæ¸ããå ´åã¯ãã®è¡æ°åã¹ãããããã List<String> expected = Arrays.asList("\\d+ms", "abc", ">> skip >>", ".{3}"); List<String> actual = Arrays.asList("123ms", "abc", "1", "2", "3", "zzz"); assertLinesMatch(expected, actual); } }
assertSame, assertNotSame
ã¤ã³ã¹ã¿ã³ã¹ã®æ¯è¼ã«ä½¿ç¨ããã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertSame; import static org.assertj.core.api.Assertions.assertNotSame; class SampleTest { @Test void sample_æ¤è¨¼å 容() { String sample = new String("sample"); assertNotSame("sample", sample); assertSame("sample", sample.intern()); } }
assertAll
å
¨ãã§ãã¯(1ã¤ã®ã¢ãµã¼ã·ã§ã³ã«å¤±æãã¦ãæ®ãã®ã¢ãµã¼ã·ã§ã³ãå
¨ã¦å®è¡)ããå ´åã«ä½¿ç¨ããã
è¤æ°ã®ã¢ãµã¼ã·ã§ã³ã失æãã¦ããã¨ã©ã¼ãã¹ãã¼ãããã®ã¯1åã ãï¼MultipleFailuresErrorï¼ã¨ãªãã
import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertAll; import static org.assertj.core.api.Assertions.assertEquals; class SampleTest { @Test void sample_æ¤è¨¼å 容() { String sample = new String("test"); // assertAllã®å¼æ°ã¯å¯å¤é·å¼æ°ã«ãªã£ã¦ãããè¤æ°ã®ã©ã ãå¼ãè¨è¿°ãã(ã©ã ãå¼ã§åã ã®ãã¹ããè¨è¿°ãã) assertAll("sample_all_NG", () -> assertEquals("sample", sample, "string not equals"), () -> assertEquals(6, sample.length(), "length not equals") ); // å®è¡çµæã¯ä»¥ä¸ã®ããã«ãªã // org.opentest4j.MultipleFailuresError: sample_all_NG (2 failures) // org.opentest4j.AssertionFailedError: string not equals ==> expected: <sample> but was: <test> // org.opentest4j.AssertionFailedError: length not equals ==> expected: <6> but was: <4> } }
assertTimeout, assertTimeoutPreemptively
ã¿ã¤ã ã¢ã¦ãããªããã¨ï¼ä¸å®æéå ã«çµäºãããã¨ï¼ã確èªããéã«ä½¿ç¨ããã
â asserTimeoutã¨assertTimeoutPreemptivelyã®å·®ç°ã«ã¤ãã¦
assertTimeoutã¯ãã¹ã対象ã®å¦çãçµããã¾ã§å¾
ã¡ãçµãã£ã¦ããAssertionFailedErrorãçºçãããã
assertTimeoutPreemptivelyã¯ãã¿ã¤ã ã¢ã¦ãæéã«ãªã£ããããã«ï¼ãã¹ã対象ã®å¦çãçµããã®ãå¾
ããã«ï¼AssertionFailedErrorãçºçãããã
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTimeout; import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively; import java.time.Duration; import java.util.concurrent.Callable; import java.util.concurrent.Executors; import org.junit.jupiter.api.Test; class SampleTest { Callable<String> task = () -> { Thread.sleep(1000); // ï¼ç§å¾ æ© return "success"; }; @Test void sample_æ¤è¨¼å 容1() { // 第1弿°ã§ã¿ã¤ã ã¢ã¦ãæéã第2弿°ï¼ã©ã ãå¼ï¼ã§ãã¹ã対象ã®å¦çãæå® String result = assertTimeout(Duration.ofSeconds(2), () -> { return Executors.newCachedThreadPool().submit(task).get(); }); assertEquals("success", result); } @Test void sample_æ¤è¨¼å 容2() { // 第1弿°ã§ã¿ã¤ã ã¢ã¦ãæéã第2弿°ï¼ã©ã ãå¼ï¼ã§ãã¹ã対象ã®å¦çãæå® String result = assertTimeoutPreemptively(Duration.ofSeconds(2), () -> { return Executors.newCachedThreadPool().submit(task).get(); }); assertEquals("success", result); } }
ä¾å¤ãã¹ãæ¹æ³
assertThrows
ä¾å¤ãçºçãããã¨ã確èªããéã«ä½¿ç¨ããã
- 第1弿°ã§ãçºçããã§ãããä¾å¤ãã®ã¯ã©ã¹ãæå®
- 第2弿°ï¼ã©ã ãå¼ï¼ã§ãã¹ã対象ã®å¦çãæå®
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; class SampleTest { /** * ãã¹ã対象 */ class Example1 { public void execute(String arg) { if (arg == null) { throw new IllegalArgumentException("䏿£ãªå¼æ°:nullã§ã"); } } } @Test void execute_IllegalArgumentException() { Example1 target = new Example1(); Throwable exception = assertThrows(IllegalArgumentException.class, () -> target.execute(null)); // çºçããä¾å¤ãåãåããä¾å¤ãä¿æãã¦ããæ å ±(ã¡ãã»ã¼ã¸ãªã©)ãæ¤è¨¼ãããã¨ãå¯è½ assertEquals(exception.getMessage(), "䏿£ãªå¼æ°:nullã§ã"); } }
assertDoesNotThrow
ä¾å¤ãçºçããªããã¨ã確èªããéã«ä½¿ç¨ããã
第1弿°ï¼ã©ã ãå¼ï¼ã§ãã¹ã対象ã®å¦çãæå®
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import org.junit.jupiter.api.Test; class SampleTest { /** * ãã¹ã対象 */ class Example1 { public void execute(String arg) { if (arg == null) { throw new IllegalArgumentException("nullã§ã"); } } } @Test void execute_OK() { Example1 target = new Example1(); assertDoesNotThrow(() -> target.execute("sample")); // ä¾å¤ãçºçããªãã㨠} }
ãã©ã¡ã¼ã¿ãã¹ã
1ã¤ã®ãã¹ãã¡ã½ããã«è¤æ°ã®ãã¿ã¼ã³ã®ãã©ã¡ã¼ã¿ã渡ãã¦ãã¹ããå®è¡ããå ´åã«ä½¿ç¨ããã
@ParameterizedTest
ãã©ã¡ã¼ã¿ãã¹ããå®è¡ãããã¨ãæç¤ºããã
以ä¸ã®ã¢ããã¼ã·ã§ã³ã¨çµã¿åããã¦ä½¿ç¨ãã(ä¸è¨ä»¥å¤ã«ã使ç¨å¯è½ãªã¢ããã¼ã·ã§ã³ã¯åå¨ãã)
@ValueSource
ï¼ ãã©ã¡ã¼ã¿ã1ã¤æ¸¡ãå ´åã«ä½¿ç¨ãã@CsvSource
ï¼ è¤æ°ã®ãã©ã¡ã¼ã¿ã渡ãå ´åã«ä½¿ç¨ãã@NullAndEmptySource
ï¼ nullã¨ç©ºç½ãé çªã«æ¸¡ã
@ValueSource
ã¨@NullAndEmptySource
ãçµã¿åããã¦ä½¿ç¨ãããã¨ãã§ããã
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.NullAndEmptySource; import org.junit.jupiter.params.provider.ValueSource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; class SampleTest { /** * ãã¹ã対象 */ class Example1 { public boolean isValid(String arg) { if (arg == null || arg.isEmpty()) { return false; } return true; } } Example1 target = new Example1(); @ParameterizedTest @ValueSource(strings = { "foo", "bar" }) void isValid_ããªãã¼ã·ã§ã³åä½ç¢ºèª1(String arg) { // "foo"ã"bar"ãé çªã«æ¸¡ããã assertTrue(target.isValid(arg)); } @ParameterizedTest @NullAndEmptySource void isValid_ããªãã¼ã·ã§ã³åä½ç¢ºèª2(String arg) { // nullã¨ç©ºç½ãé çªã«æ¸¡ããã assertFalse(target.isValid(arg)); } @ParameterizedTest @CsvSource({ // "å¤, ããªãã¼ã·ã§ã³çµæ(null以å¤ã¯true)" " 'sample' , true ", // æåå " '' , false ", // ç©ºç½ " , false " // null }) public void isValid_ããªãã¼ã·ã§ã³åä½ç¢ºèª3(String arg, boolean result) { // ã"sample" 㨠trueãããç©ºç½ ã¨ falseãããnull 㨠falseããé çªã«æ¸¡ããã assertEquals(target.isValid(arg), result); } @ParameterizedTest @ValueSource(strings = { "foo", "bar" }) @NullAndEmptySource void isValid_ãµã³ãã«(String arg) { // ãã©ã¡ã¼ã¿ãã"foo"ã"bar"ãnullã空ç½ãã®é çªã§ãè¨4åã®ãã¹ããå®è¡ããã } }
ãã¹ãã«ãã¬ãã¸ã«ã¤ãã¦ã®è¨äºã¯ãã¡ãï¼ olafnosuke.hatenablog.com
ã¢ãã¯ã«ã¤ãã¦ã®è¨äºãæ¸ãã¦ãã¾ãï¼
OSSã使ç¨ãããã°ã®åºåå 容確èªãã¹ãã«ã¤ãã¦ã¯ãã¡ãï¼