🤝 활동/내배캠TIL

[내일배움캠프 39일차 TIL] 단위 테스트란 무엇일까?

MNY 2024. 6. 13. 00:12
728x90
반응형
2024.06.12.(수)
오늘의 진도 : Spring 심화주차 1주차 1-4 단위 테스트란 무엇일까? 까지...

단위 테스트.. 올 초에 책으로 혼자 공부했을 때 기억난당...
오늘의 학습, 오늘의/지난 날의 궁금증, 오늘의 회고 이렇게 3개의 큰 틀로 나누어 정리할 것이다.

 

💡 오늘의 학습 키워드

- Spring 심화주차 1주차 -
kakao 동의항목 이메일 선택
SimpleJpaRepository(save)
@DisplayName
@Nested
@TestMethodOrder & @Order
@RepeatedTest
@ParameterizedTest & @ValueSource
assert 메소드
given - when - then 패턴

 

kakao 동의항목 이메일 선택

Kakao 동의항목에서 이메일을 선택하려고 보니

아래 사진과 같이 '카카오계정(이메일)' 부분이 권한이 없다고 나와있었다...

 

1. '개인정보 동의항목 심사 신청'을 클릭한다.

 

2. '비즈 앱 전환'을 클릭한다.

 

3. '개인 개발자 비즈 앱 전환'을 클릭한다.

 

4. 그러면 아래와 같이 개인 개발자 비즈 앱 전환 창이 뜨는데 

비즈 앱 전환 목적을 '이메일 필수 동의'로 설정하고 전환 버튼을 클릭한다.

 

5. 아래의 사진처럼 'Biz'가 추가되었다면 성공!

 

SimpleJpaRepository(save)

: save는 상황에 따라 저장된 정보가 없을 경우 persist(저장)하고 있을 경우 merge(수정)한다.

 

@DisplayName

: 테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 때

@Test
@DisplayName("테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 때")
void test1() {
    System.out.println("테스트 내용 빠르게 파악");
}

 

@Nested

: 제 별로 테스트를 그룹지어서 파악하기 좋다.

@Nested
@DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.")
class Test1 {
    @Test
    @DisplayName("Test1 - test1()")
    void test1() {
        System.out.println("Test1.test1");
    }

    @Test
    @DisplayName("Test1 - test2()")
    void test2() {
        System.out.println("Test1.test2");
    }
}

 

@TestMethodOrder & @Order

테스트 순서 지정

@Nested
@DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class Test1 {

    @Order(1)
    @Test
    @DisplayName("Test1 클래스")
    void test() {
        System.out.println("\nTest1 클래스");
    }

    @Order(3)
    @Test
    @DisplayName("Test1 - test1()")
    void test1() {
        System.out.println("Test1.test1");
    }

    @Order(2)
    @Test
    @DisplayName("Test1 - test2()")
    void test2() {
        System.out.println("Test1.test2");
    }
}

 

@RepeatedTest

: 테스트용 반복문

@RepeatedTest(value = 5, name = "반복 테스트 {currentRepetition} / {totalRepetitions}")
// 현재 반복 횟수/총 실행 횟수

 

@ParameterizedTest & @ValueSource

파라미터 값 활용하여 테스트 하기

@ParameterizedTest
@ValueSource(ints = {1, 2, 3, 4, 5, 6, 7, 8, 9})

 

assert 메소드

// assertEquals(예상값, 결과값, 메시지)
assertEquals(2.5, result, () -> "연산자 혹은 분모가 0이 아닌지 확인해보세요!"); //같은지 확인
assertNotEquals(2.5, result); // 다른지 확인

assertTrue(calculator.validateNum(9)); // True 확인
assertFalse(calculator.validateNum(0)); // False 확인

assertNotNull(result1); // Null이 아닌지 확인
assertNull(result2); // Null인지 확인

IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> calculator.operate(5, "?", 2));
assertEquals("잘못된 연산자입니다.", exception.getMessage());
assertThrow(예상하는 클래스 타입, 실제 실행 클래스)
// "잘못된 연산자입니다" : IllegalArgumentException 의 값

 

given - when - then 패턴

  • given : 테스트하고자 하는 대상을 실제로 실행하기 전에 테스트에 필요한 값들을 미리 선언해두는 것
  • when : 테스트하고자 하는 대상을 실제로 실행시키는 것
  • then : 어떤 특정한 행동 때문에 발생할 것이라고 예상되는 결과에 대해 예측하고 맞는지 확인
// case 1 : given - when - then
@Test
@DisplayName("계산기 연산 성공 테스트")
void test1() {
    // given
    int num1 = 5;
    String op = "/";
    int num2 = 2;

    // when
    Double result = calculator.operate(num1, op, num2);

    // then
    assertNotNull(result);
    assertEquals(2.5, result);
}

// case 2 : given - when & then
@Test
@DisplayName("계산기 연산 실패 테스트 : 연산자가 잘못됐을 경우")
void test1_2() {
    // given
    int num1 = 5;
    String op = "?";
    int num2 = 2;

    // when - then
    IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> calculator.operate(5, "?", 2));
    assertEquals("잘못된 연산자입니다.", exception.getMessage());
}

 

* Assertions 메소드

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model do not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and custo

junit.org

 


오늘의 궁금증

  • 더티체킹에 대해... ?

 

항상 까먹는 나의 다짐👊

예전에 강의도 했었고 매번 이게 뭐지? 했었는데 

항상 까먹는다... 내일은 기필코 알아본다!

 


오늘의 회고

  • 12시간 중 얼마나 몰입했는가?

오늘 오전에는 밀린 TIL 작성하고

점심 먹고는 Spring 심화 강의 듣고 중간에 수준별 실시간 강의 들었다!

저녁 시간에는 독서모임하는 거 책을 다 못 읽어서 책을 읽었다.

적고보니 뭔가 열심히 한 것 같으니 그래도 8 - 9시간 정도는 몰입하지 않았나 하는 생각이든다.

 

  • 오늘의 생각

새로운 팀원들을 만나서 사진도 찍고📸✨..

팀 노션도 기깔나게 꾸며서 매우 만족한다. 

시간이 지남에 따라 실시간으로 힘들어해하는 우리 팀원들.. 화이팅해요!

우리팀에 TIL 우수자 나올 것 같은 사람이 2명이나 있다!!!

진짜 넘사야.. 이건 불공평해ㅠ 그러니까 여기에 링크를 걸어놔야지..

아무튼.. 다 같이 수료하고도 저희 친하게 지내요😆

 

오늘의 TMI : kakao 동의항목 이메일 선택.. 슬랙 공지방에 매니저님이 올려주셨더라... 

 

 

피할 수 없다면 즐기는 자가 일류

션의 개발일기장

enjoydev.tistory.com

 

 

김기석

깃허브: https://github.com/kiseokkm

kiseokkm.tistory.com

 

 

  • 내일 학습할 것은 무엇인지

일단 오전 중에는 지난 주 WIL 작성하고.. 강의를 다 들으려고 한다.

오후에는 과제 살펴본 후 시작하는 게 목표!

중간 중간에 개발 관련 책 좀 읽어야지

개발 관련 책은 읽고 따로 카테고리 만들어서 좀 정리해야겠다.

일단, 나~~~~~~~~~중에???

728x90
반응형