From 74309ead0972f4f2e5a5f015226b63212c083ac7 Mon Sep 17 00:00:00 2001 From: rlawltjd8547 Date: Mon, 30 Sep 2024 15:26:11 +0900 Subject: [PATCH 1/3] =?UTF-8?q?#22=5F4=20[ParameterizedTest=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=ED=95=98=EA=B8=B0]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/testcode/parameterized/Day.java | 25 +++ .../testcode/parameterized/FindSunday.java | 16 ++ .../CustomArgumentsProvider.java | 20 ++ .../parameterized/FindSundayTest.java | 178 ++++++++++++++++++ 4 files changed, 239 insertions(+) create mode 100644 TestCode/src/main/java/com/example/testcode/parameterized/Day.java create mode 100644 TestCode/src/main/java/com/example/testcode/parameterized/FindSunday.java create mode 100644 TestCode/src/test/java/com/example/testcode/parameterized/CustomArgumentsProvider.java create mode 100644 TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java diff --git a/TestCode/src/main/java/com/example/testcode/parameterized/Day.java b/TestCode/src/main/java/com/example/testcode/parameterized/Day.java new file mode 100644 index 0000000..2b705ee --- /dev/null +++ b/TestCode/src/main/java/com/example/testcode/parameterized/Day.java @@ -0,0 +1,25 @@ +package com.example.testcode.parameterized; + +public enum Day { + + Monday("2024-09-30"), + Tuesday("2024-10-01"), + Wednesday("2024-10-02"), + Thursday("2024-10-03"), + Friday("2024-10-04"), + Saturday("2024-10-05"), + Sunday("2024-10-06"); + + + private String date; + + Day(String date) { + this.date = date; + } + + public String getDate() { + return date; + } +} + + diff --git a/TestCode/src/main/java/com/example/testcode/parameterized/FindSunday.java b/TestCode/src/main/java/com/example/testcode/parameterized/FindSunday.java new file mode 100644 index 0000000..82b6d47 --- /dev/null +++ b/TestCode/src/main/java/com/example/testcode/parameterized/FindSunday.java @@ -0,0 +1,16 @@ +package com.example.testcode.parameterized; + +import java.time.LocalDate; +import java.util.stream.Stream; + +public class FindSunday { + + + public static LocalDate findFirstSunday(LocalDate date) { + if (date.getDayOfWeek().getValue() == 7) { // 날짜가 일요일인지 확인 + return date; // 만약 해당 날짜가 일요일이면 그 날짜를 반환 + } + return findFirstSunday(date.plusDays(1)); // 일요일이 아니면 하루를 더하고 다시 함수 호출 + } + +} diff --git a/TestCode/src/test/java/com/example/testcode/parameterized/CustomArgumentsProvider.java b/TestCode/src/test/java/com/example/testcode/parameterized/CustomArgumentsProvider.java new file mode 100644 index 0000000..1c1ce3d --- /dev/null +++ b/TestCode/src/test/java/com/example/testcode/parameterized/CustomArgumentsProvider.java @@ -0,0 +1,20 @@ +package com.example.testcode.parameterized; + +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ArgumentsProvider; + +import java.time.LocalDate; +import java.util.stream.Stream; + +public class CustomArgumentsProvider implements ArgumentsProvider { + @Override + public Stream provideArguments(ExtensionContext context) { + return Stream.of( + Arguments.of("2024-09-30"), + Arguments.of("20241001"), + Arguments.of("2024/10/02"), + Arguments.of("2024-10-03") + ); + } +} diff --git a/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java b/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java new file mode 100644 index 0000000..d5552e6 --- /dev/null +++ b/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java @@ -0,0 +1,178 @@ +package com.example.testcode.parameterized; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.*; + +import java.time.LocalDate; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.*; + +class FindSundayTest { + + + @Order(1) + @Test + @DisplayName("정상적인 LocalDate를 입력했을때 일요일을 찾는다. - success") + public void givenLocalDate_whenFindFirstSunday_thenFirstSunday() { + //given + LocalDate date = LocalDate.of(2024, 9, 29); + //when + LocalDate result = FindSunday.findFirstSunday(date); + //then + assertEquals(LocalDate.of(2024, 9, 29), result); + + } + + @Order(2) + @Test + @DisplayName("날짜 포맷이 맞지않게 12345 입력했을때 실패한다.") + public void givenWrongLocalDateForMat_whenFindFirstSunday_thenFirstSunday() { + //given + LocalDate date = LocalDate.of(12345, 12345, 12345); + //when + LocalDate result = FindSunday.findFirstSunday(date); + //then + assertEquals(LocalDate.of(2024, 9, 29), result); + + } + + @Order(3) + @Test + @DisplayName("경계테스트 - 최소값 테스트 - success!") + public void givenMinLocalDate_whenFindFirstSunday_thenFirstSunday() { + //given + LocalDate date = LocalDate.MIN; + //when + LocalDate result = FindSunday.findFirstSunday(date); + //then + assertEquals(LocalDate.of(-999999999, 01, 7), result); + + } + + + @Order(4) + @Test + @DisplayName("경계테스트 - 최대값 테스트 - fail!") + public void givenMaxLocalDate_whenFindFirstSunday_thenFirstSunday() { + //given + LocalDate date = LocalDate.MAX; + //when + LocalDate result = FindSunday.findFirstSunday(date); + //then + assertEquals(LocalDate.of(999999999, 12, 31), result); + + } + + + /* + @ValueSource 어노테이션을 사용하여 여러개의 값을 테스트에 주입할 수 있다. + 특징은 기본형타입만 지원되며 배열형태로 설정이된다 그로고 하나씩 반복실행하게된다 + */ + @Order(5) + @ParameterizedTest //@Test 대신 @ParameterizedTest를 사용한다. + @DisplayName("@ValueSource 어노테이션을 사용하여 여러개의 값을 테스트에 주입할 수 있다. - success!") + @ValueSource(strings = {"2024-09-30", "2024-10-01", "2024-10-02", "2024-10-03", "2024-10-04", "2024-10-05"}) + public void valueSourceTest(String date) { + //given + LocalDate localDate = LocalDate.parse(date); + //when + LocalDate result = FindSunday.findFirstSunday(localDate); + //then + assertEquals(LocalDate.of(2024, 10, 6), result); + } + + + + //@EnumSource 어노테이션은 Enum 타입의 값을 테스트에 주입할 수 있다. + //특정 Enum 타입을 지정하면 해당 Enum의 모든 값을 테스트에 주입한다. + @Order(6) + @ParameterizedTest //@Test 대신 @ParameterizedTest를 사용한다. + @DisplayName("@EnumSource 어노테이션을 사용하여 여러개의 값을 테스트에 주입할 수 있다. - success!") + @EnumSource(Day.class) + //@EnumSource(value = Day.class, names = {"Monday", "Tuesday"}) // Day enum의 Monday, Tuesday만 테스트에 주입 + public void enumSourceTest(Day day) { + //given + LocalDate localDate = LocalDate.parse(day.getDate()); + //when + LocalDate result = FindSunday.findFirstSunday(localDate); + //then + assertEquals(LocalDate.of(2024, 10, 6), result); + + } + + /* + @valueSource어노테이션은 기본형만 지원하였으나 + @MethodSource어노테이션을 사용하면 복잡한객체나 여러가지 다양한타입의 데이터를 전달가능 + 데이터를 제공할 메소드는 static으로 선언되어야하며 + !!Collection!!을 반환해야한다. + 가장 많이사용하는 Stream, Iterable, Iterator, Object[]를 반환해야한다. + 그리고 해당 메소드는 테스트클래스나 외부클래스에존재해도된다 + */ + @Order(7) + @ParameterizedTest + @DisplayName("MethodSource 이용한 테스트") + @MethodSource("testMethodSource") + public void methodSourceTest(LocalDate date) { + //given + //when + LocalDate result = FindSunday.findFirstSunday(date); + //then + assertEquals(LocalDate.of(2024, 10, 6), result); + + + } + + // test테스트에 사용될 데이터 스트림으로 반환 + private static Stream testMethodSource() { + return Stream.of(LocalDate.of(2024, 9, 30)); + } + + + /* + Csv형태는 String으로 반환하지만 + Junit5에서는 자동으로 타입변환을 해준다. 즉 LocalDate로 받아도 된다. + */ + @Order(8) + @ParameterizedTest + @DisplayName("CsvSource 이용한 테스트") + @CsvSource({ + "2024-09-30", + "2024-10-01", + "2024-10-02", + "2024-10-03", + "20241004", + "2024/10/05" + }) + public void csvSourceTest(LocalDate date) { + //given + //when + LocalDate result = FindSunday.findFirstSunday(date); + //then + assertEquals(LocalDate.of(2024, 10, 6), result); + } + + + + /* + @MethodSource와 다르게 ArgumentsProvider 라는 커스텀데이터 제공 클래스를 통해 데이터를 제공한다 + 리턴타입은 ArgumentProvider의 ArgumentsStream이다. (Stream) + 항상 외부클래스로 구현해야하고 ArgumentsProvider 인터페이스를 반드시 구현해야한다. + 이것역시도 자동으로 형변환을 지원해준다 + */ + @Order(9) + @ParameterizedTest + @DisplayName("@ArgumentSource 이용한 테스트") + @ArgumentsSource(CustomArgumentsProvider.class) + public void argumentSourceTest(LocalDate date) { + //given + //when + LocalDate result = FindSunday.findFirstSunday(date); + //then + assertEquals(LocalDate.of(2024, 10, 6), result); + } + +} \ No newline at end of file From fd9e0f354394ed57c36f5523a9082adc94caa7f5 Mon Sep 17 00:00:00 2001 From: rlawltjd8547 Date: Wed, 2 Oct 2024 01:06:50 +0900 Subject: [PATCH 2/3] =?UTF-8?q?#22=5F5=20[ParameterizedTest=20=EC=88=98?= =?UTF-8?q?=EC=A0=95]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../testcode/parameterized/Constants.java | 24 +++++++++ .../example/testcode/parameterized/Day.java | 3 +- .../testcode/parameterized/FindSunday.java | 7 +++ .../testcode/parameterized/Constants.java | 16 ++++++ .../parameterized/FindSundayTest.java | 50 +++++++++++-------- 5 files changed, 77 insertions(+), 23 deletions(-) create mode 100644 TestCode/src/main/java/com/example/testcode/parameterized/Constants.java create mode 100644 TestCode/src/test/java/com/example/testcode/parameterized/Constants.java diff --git a/TestCode/src/main/java/com/example/testcode/parameterized/Constants.java b/TestCode/src/main/java/com/example/testcode/parameterized/Constants.java new file mode 100644 index 0000000..f330da6 --- /dev/null +++ b/TestCode/src/main/java/com/example/testcode/parameterized/Constants.java @@ -0,0 +1,24 @@ +package com.example.testcode.parameterized; + +public enum Constants { + + MONDAY(1), + TUESDAY(2), + WEDNESDAY(3), + THURSDAY(4), + FRIDAY(5), + SATURDAY(6), + SUNDAY(7); + + private final int day; + + + Constants(int day) { + this.day = day; + } + + public int getDay() { + return day; + } + +} diff --git a/TestCode/src/main/java/com/example/testcode/parameterized/Day.java b/TestCode/src/main/java/com/example/testcode/parameterized/Day.java index 2b705ee..bbb1695 100644 --- a/TestCode/src/main/java/com/example/testcode/parameterized/Day.java +++ b/TestCode/src/main/java/com/example/testcode/parameterized/Day.java @@ -10,8 +10,7 @@ public enum Day { Saturday("2024-10-05"), Sunday("2024-10-06"); - - private String date; + private final String date; Day(String date) { this.date = date; diff --git a/TestCode/src/main/java/com/example/testcode/parameterized/FindSunday.java b/TestCode/src/main/java/com/example/testcode/parameterized/FindSunday.java index 82b6d47..8a02fef 100644 --- a/TestCode/src/main/java/com/example/testcode/parameterized/FindSunday.java +++ b/TestCode/src/main/java/com/example/testcode/parameterized/FindSunday.java @@ -3,9 +3,16 @@ import java.time.LocalDate; import java.util.stream.Stream; + public class FindSunday { + //Constants.SUNDAY.getDay() + /* + 'int com.example.testcode.parameterized.Constants.getDay()' + java.lang.NoSuchMethodError: 'int com.example.testcode.parameterized.Constants.getDay()' + 테스트코드에러 ecum을 왜 못찾지?... + */ public static LocalDate findFirstSunday(LocalDate date) { if (date.getDayOfWeek().getValue() == 7) { // 날짜가 일요일인지 확인 return date; // 만약 해당 날짜가 일요일이면 그 날짜를 반환 diff --git a/TestCode/src/test/java/com/example/testcode/parameterized/Constants.java b/TestCode/src/test/java/com/example/testcode/parameterized/Constants.java new file mode 100644 index 0000000..3392f90 --- /dev/null +++ b/TestCode/src/test/java/com/example/testcode/parameterized/Constants.java @@ -0,0 +1,16 @@ +package com.example.testcode.parameterized; + +public enum Constants { + + SUNDAY(7); + + private long day; + + Constants(long day) { + this.day = day; + } + + public long getDate() { + return day; + } +} diff --git a/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java b/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java index d5552e6..115da85 100644 --- a/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java +++ b/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java @@ -3,9 +3,11 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ParameterResolutionException; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.*; +import java.time.DateTimeException; import java.time.LocalDate; import java.util.stream.Stream; @@ -14,9 +16,8 @@ class FindSundayTest { - @Order(1) @Test - @DisplayName("정상적인 LocalDate를 입력했을때 일요일을 찾는다. - success") + @DisplayName("LocalDate(yyyy-mm-dd)를 입력했을때 일요일을 찾는다. - success") public void givenLocalDate_whenFindFirstSunday_thenFirstSunday() { //given LocalDate date = LocalDate.of(2024, 9, 29); @@ -27,22 +28,38 @@ public void givenLocalDate_whenFindFirstSunday_thenFirstSunday() { } - @Order(2) @Test - @DisplayName("날짜 포맷이 맞지않게 12345 입력했을때 실패한다.") + @DisplayName("날짜 포맷이 맞지않게(yyyy-mm-dd형식이아닌) 12345 입력했을때 실패한다.") public void givenWrongLocalDateForMat_whenFindFirstSunday_thenFirstSunday() { + /* 기존 코드 //given LocalDate date = LocalDate.of(12345, 12345, 12345); //when LocalDate result = FindSunday.findFirstSunday(date); + + // assertThrows 메서드가 예외를 발생시키는 코드를 람다 표현식으로 감싸야 한다 //then - assertEquals(LocalDate.of(2024, 9, 29), result); + assertThrows(DateTimeException.class, () -> FindSunday.findFirstSunday(date)); + */ + + /* + 에초에 테스트작성시나리오가 잘못되었다 given에서 이미 예외가 발생하기 때문 + 현재 상황에선 아래와 같이 테스트를 작성해야한다. + 혹은 테스트할 메소드에 LocalDate로 변환작업이 있어야지 기존 시나리오 검증이 된다 + */ + + //then + assertThrows(DateTimeException.class, () -> { + //given + LocalDate date = LocalDate.of(12345, 12345, 12345); + //when + FindSunday.findFirstSunday(date); + }); } - @Order(3) @Test - @DisplayName("경계테스트 - 최소값 테스트 - success!") + @DisplayName("경계테스트 - -999999999년을 입력해도 정상적으로 반환한다 - success!") public void givenMinLocalDate_whenFindFirstSunday_thenFirstSunday() { //given LocalDate date = LocalDate.MIN; @@ -54,16 +71,16 @@ public void givenMinLocalDate_whenFindFirstSunday_thenFirstSunday() { } - @Order(4) @Test - @DisplayName("경계테스트 - 최대값 테스트 - fail!") + @DisplayName("경계테스트 - 999999999년을 입력하면 정상적으로 반환이 되지않는다") public void givenMaxLocalDate_whenFindFirstSunday_thenFirstSunday() { //given LocalDate date = LocalDate.MAX; //when - LocalDate result = FindSunday.findFirstSunday(date); + //LocalDate result = FindSunday.findFirstSunday(date); //then - assertEquals(LocalDate.of(999999999, 12, 31), result); + //assertThrows는 람다식으로 표현을 하게되면 give-when-then형식이 깨지게된다? + assertThrows(DateTimeException.class, () -> FindSunday.findFirstSunday(date)); } @@ -72,7 +89,6 @@ public void givenMaxLocalDate_whenFindFirstSunday_thenFirstSunday() { @ValueSource 어노테이션을 사용하여 여러개의 값을 테스트에 주입할 수 있다. 특징은 기본형타입만 지원되며 배열형태로 설정이된다 그로고 하나씩 반복실행하게된다 */ - @Order(5) @ParameterizedTest //@Test 대신 @ParameterizedTest를 사용한다. @DisplayName("@ValueSource 어노테이션을 사용하여 여러개의 값을 테스트에 주입할 수 있다. - success!") @ValueSource(strings = {"2024-09-30", "2024-10-01", "2024-10-02", "2024-10-03", "2024-10-04", "2024-10-05"}) @@ -89,7 +105,6 @@ public void valueSourceTest(String date) { //@EnumSource 어노테이션은 Enum 타입의 값을 테스트에 주입할 수 있다. //특정 Enum 타입을 지정하면 해당 Enum의 모든 값을 테스트에 주입한다. - @Order(6) @ParameterizedTest //@Test 대신 @ParameterizedTest를 사용한다. @DisplayName("@EnumSource 어노테이션을 사용하여 여러개의 값을 테스트에 주입할 수 있다. - success!") @EnumSource(Day.class) @@ -112,7 +127,6 @@ public void enumSourceTest(Day day) { 가장 많이사용하는 Stream, Iterable, Iterator, Object[]를 반환해야한다. 그리고 해당 메소드는 테스트클래스나 외부클래스에존재해도된다 */ - @Order(7) @ParameterizedTest @DisplayName("MethodSource 이용한 테스트") @MethodSource("testMethodSource") @@ -136,14 +150,9 @@ private static Stream testMethodSource() { Csv형태는 String으로 반환하지만 Junit5에서는 자동으로 타입변환을 해준다. 즉 LocalDate로 받아도 된다. */ - @Order(8) @ParameterizedTest @DisplayName("CsvSource 이용한 테스트") @CsvSource({ - "2024-09-30", - "2024-10-01", - "2024-10-02", - "2024-10-03", "20241004", "2024/10/05" }) @@ -152,7 +161,7 @@ public void csvSourceTest(LocalDate date) { //when LocalDate result = FindSunday.findFirstSunday(date); //then - assertEquals(LocalDate.of(2024, 10, 6), result); + assertThrows(ParameterResolutionException.class, () -> FindSunday.findFirstSunday(date)); } @@ -163,7 +172,6 @@ public void csvSourceTest(LocalDate date) { 항상 외부클래스로 구현해야하고 ArgumentsProvider 인터페이스를 반드시 구현해야한다. 이것역시도 자동으로 형변환을 지원해준다 */ - @Order(9) @ParameterizedTest @DisplayName("@ArgumentSource 이용한 테스트") @ArgumentsSource(CustomArgumentsProvider.class) From c45900785fb8c87c70e73a3ef8a2bf4352825612 Mon Sep 17 00:00:00 2001 From: rlawltjd8547 Date: Fri, 11 Oct 2024 21:48:27 +0900 Subject: [PATCH 3/3] =?UTF-8?q?#22=5F6=20[BDD=EB=B0=A9=EC=8B=9D=EC=9D=84?= =?UTF-8?q?=20=EA=B3=A0=EC=88=98=ED=95=98=EC=A7=80=20=EB=A7=90=EA=B3=A0=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EC=9E=91=EC=84=B1]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomArgumentsProvider.java | 4 +- .../parameterized/FindSundayTest.java | 51 ++++--------------- 2 files changed, 12 insertions(+), 43 deletions(-) diff --git a/TestCode/src/test/java/com/example/testcode/parameterized/CustomArgumentsProvider.java b/TestCode/src/test/java/com/example/testcode/parameterized/CustomArgumentsProvider.java index 1c1ce3d..6d3997f 100644 --- a/TestCode/src/test/java/com/example/testcode/parameterized/CustomArgumentsProvider.java +++ b/TestCode/src/test/java/com/example/testcode/parameterized/CustomArgumentsProvider.java @@ -12,8 +12,8 @@ public class CustomArgumentsProvider implements ArgumentsProvider { public Stream provideArguments(ExtensionContext context) { return Stream.of( Arguments.of("2024-09-30"), - Arguments.of("20241001"), - Arguments.of("2024/10/02"), + Arguments.of("2024-10-01"), + Arguments.of("2024-10-02"), Arguments.of("2024-10-03") ); } diff --git a/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java b/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java index 115da85..f13370b 100644 --- a/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java +++ b/TestCode/src/test/java/com/example/testcode/parameterized/FindSundayTest.java @@ -19,41 +19,20 @@ class FindSundayTest { @Test @DisplayName("LocalDate(yyyy-mm-dd)를 입력했을때 일요일을 찾는다. - success") public void givenLocalDate_whenFindFirstSunday_thenFirstSunday() { - //given - LocalDate date = LocalDate.of(2024, 9, 29); - //when - LocalDate result = FindSunday.findFirstSunday(date); - //then - assertEquals(LocalDate.of(2024, 9, 29), result); + //BDD쓰지말고 극한으로 줄여보자 + assertEquals(LocalDate.of(2024, 9, 29), FindSunday.findFirstSunday(LocalDate.of(2024, 9, 29))); } @Test @DisplayName("날짜 포맷이 맞지않게(yyyy-mm-dd형식이아닌) 12345 입력했을때 실패한다.") public void givenWrongLocalDateForMat_whenFindFirstSunday_thenFirstSunday() { - /* 기존 코드 - //given - LocalDate date = LocalDate.of(12345, 12345, 12345); - //when - LocalDate result = FindSunday.findFirstSunday(date); - - // assertThrows 메서드가 예외를 발생시키는 코드를 람다 표현식으로 감싸야 한다 - //then - assertThrows(DateTimeException.class, () -> FindSunday.findFirstSunday(date)); - */ /* - 에초에 테스트작성시나리오가 잘못되었다 given에서 이미 예외가 발생하기 때문 - 현재 상황에선 아래와 같이 테스트를 작성해야한다. - 혹은 테스트할 메소드에 LocalDate로 변환작업이 있어야지 기존 시나리오 검증이 된다 - */ - - //then + FindSunday.findFirstSunday(date); 해당 구문이전에 이미 예외가 발생하기에 불필요함으로 제거 + */ assertThrows(DateTimeException.class, () -> { - //given LocalDate date = LocalDate.of(12345, 12345, 12345); - //when - FindSunday.findFirstSunday(date); }); } @@ -74,13 +53,8 @@ public void givenMinLocalDate_whenFindFirstSunday_thenFirstSunday() { @Test @DisplayName("경계테스트 - 999999999년을 입력하면 정상적으로 반환이 되지않는다") public void givenMaxLocalDate_whenFindFirstSunday_thenFirstSunday() { - //given - LocalDate date = LocalDate.MAX; - //when - //LocalDate result = FindSunday.findFirstSunday(date); - //then - //assertThrows는 람다식으로 표현을 하게되면 give-when-then형식이 깨지게된다? - assertThrows(DateTimeException.class, () -> FindSunday.findFirstSunday(date)); + //given은 없지만 더 간결하게 표현 시도 + assertThrows(DateTimeException.class, () -> FindSunday.findFirstSunday(LocalDate.MAX)); } @@ -153,15 +127,12 @@ private static Stream testMethodSource() { @ParameterizedTest @DisplayName("CsvSource 이용한 테스트") @CsvSource({ - "20241004", - "2024/10/05" + "2024-10-04", + "2024-10-05" }) public void csvSourceTest(LocalDate date) { - //given - //when LocalDate result = FindSunday.findFirstSunday(date); - //then - assertThrows(ParameterResolutionException.class, () -> FindSunday.findFirstSunday(date)); + assertEquals(LocalDate.of(2024, 10, 6), result); } @@ -173,11 +144,9 @@ public void csvSourceTest(LocalDate date) { 이것역시도 자동으로 형변환을 지원해준다 */ @ParameterizedTest - @DisplayName("@ArgumentSource 이용한 테스트") + @DisplayName("@ArgumentSource 이용한 테스트 ") @ArgumentsSource(CustomArgumentsProvider.class) public void argumentSourceTest(LocalDate date) { - //given - //when LocalDate result = FindSunday.findFirstSunday(date); //then assertEquals(LocalDate.of(2024, 10, 6), result);