본문 바로가기
멋쟁이사자처럼 동아리/Java

멋쟁이사자처럼 JAVA -JUnit5 문법

by PlusUltraCode 2024. 5. 6.

@Test -> 이걸 반드시 붙여야 테스트 진행  반드시 void형


@Display -> 해당 테스트의 이름을 나타내준다.


@Nested -> 이걸 붙여야 중첩클래스 내부에 있는것으로 인식되며 테스트 메서드로서의 역할을 함


@Disabled -> 이걸 붙여줘야 테스트를 안하겠다는 의미


assertEquals(expected,actual)  두 값이 같은지 비교  :: if문 안쓰고 그냥 쌩으로 저렇게 쓰는거
다만  assertEquals 는 해당 클래스 내의 equals를 사용하기 때문에 정의를 해주고 사용해야 된다.
assertEquals(expected, actual, "두 값이 일치하지 않습니다.");

assertNotEquals(expected,actual,"두 값이 다르다면 성공")

assertSame(expected, actual) 두 객체가 같은 객체인지 비교

assertThrows(Exception.class, this::causeException); 특정예외가 발생한다면 성공

assertDoesNotThrow(executable) 특정예외가 발생하지 않으면 성공

assertDoesNotThrow(()-> {
final var number = Integer.valueOf(0x80000000);


});

assertAll(
                    () -> assertEquals(3, 1 + 2),
                    () -> assertEquals(5, 2 + 3),
                    () -> assertEquals(21, 7 * 3),
                    () -> assertEquals(16, 7 * 3 ^ 5),
                    () -> assertEquals(5, 7 * 3 / 5 + 33 / 21),
                    () -> assertEquals(22, 33 * 3 / 5 + 7 / 2),
                    () -> assertEquals(23, 33 * 3 / 5 + 7 / 2 + 1)
            );


@ParameterizedTest
@ValueSource(ints ={1,2,3,4})
 void ValueSource_애노테이션을_붙여_정수_매개변수를_여러_번_입력받는다(int value) {
            assertTrue(value > 0 && value < 10);
        }

@ParameterizedTest
        @ValueSource(strings = {"a", "b", "c"})
        @DisplayName("ValueSource 애노테이션을 붙여 문자열 매개변수를 여러 번 입력받는다") 
        void ValueSource_애노테이션을_붙여_문자열_매개변수를_여러_번_입력받는다(String value)  {
            assertEquals(value.length(), 1);
        }


@ParameterizedTest
        @ValueSource(strings = {"1", "2", "3", "4", "5"})
        @DisplayName("ValueSource 애노테이션을 활용하여 1부터 5까지의 문자열 값을 Integer로 parseInt하는 로직이 예외를 발생시키지 않는 지 검증한다")
        void ValueSource_애노테이션을_활용하여_1부터_5까지의_문자열_값을_Integer로_변경하는_로직이_예외를_발생시키지_않는_지_검증한다(String value) {
            assertDoesNotThrow(() -> Integer.parseInt(value));
        }


 private static Stream<Arguments> methodSourceTestArguments() {
            return Stream.of(Arguments.arguments(new Object()));
        }


  @ParameterizedTest
        @MethodSource("methodSourcesTestArguments")
        @DisplayName("MethodSource 애노테이션을 붙여 Object 매개변수를 여러 번 입력받는다")
        void MethodSource_애노테이션을_붙여_Object_매개변수를_여러_번_입력받는다(Object object) {
            assertInstanceOf(Object.class, object);
        }

private static Stream<Arguments> methodSourcesTestArguments() {
            return Stream.of(Arguments.arguments());
        }


 @ParameterizedTest
        @MethodSource("methodSourcesStringAndIntegerTestArguments")
        @DisplayName("MethodSource 애노테이션을 붙여 정수와 문자열 매개변수를 입력받는다")
        void MethodSource_애노테이션을_붙여_정수와_문자열_매개변수를_입력받는다(String v1, int v2) {
            // TODO: `MethodSource`를 사용하지 않고 문자열과 정수 변수들을 직접 선언하여 테스트하는 방식과, `MethodSource`를 통해 입력받아 테스트하는 방식의 차이를 비교해보세요.
            assertEquals(Integer.parseInt(v1), v2);
        }

'멋쟁이사자처럼 동아리 > Java' 카테고리의 다른 글

멋쟁이사자처럼 JAVA - AssertThat  (0) 2024.05.06