2023/01/03 TIL | 테스팅 (1) 단위 테스트

    반응형

    💭 오늘의 학습 전략

    #  테스팅

    ◼️ 기능 테스트

    ◼️ 통합 테스트

    ◻️ 슬라이스 테스트

    ◼️ 단위 테스트

    #  단위 테스트

    ◻️ F.I.R.S.T 원칙

    ◻️ Given-When-Then 표현 스타일

    ◼️Assertion

    ◼️JUnit

     ◾다양한 Assertion 메서드

     ◽테스트 케이스 실행 전, 후 처리

       @BeforeEach, @BeforeAll, @AfterEach, @AfterAll

     ◾실습

    ◻️ Hamcrest

     ◽ Matcher

     ◽ JUnit Assertion 메서드와의 차이

    #  슬라이스 테스트

    ◻️ API 계층 테스트

     ◽ @SpringBootTest

     ◽ @AutoConfigureMockMvc

     ◽ MockMvc (perform())

     ◽ ResultActions 객체를 통한 검증

    ◻️ 데이터 액세스 계층 테스트

     

    🌼 학습한 것들

    ◾ 테스팅 

     ▪️ 기능 테스트: 사용자 입장에서 올바른 동작 확인

      - 프론트 측에서 가볍게, QA

      - DB, API 툴, 외부 연동 등 많은 연관 대상

     ▪️ 통합 테스트: API -> 서비스 -> 데이터 액세스 -> DB 올바른 동작 확인

      - 클라이언트 툴 없이 주로 개발자(팀)이 주체

      - 여러 계층, DB 등 많은 연관 대상

     ▪️ 슬라이스 테스트: Mock을 통한 계층별 테스트

      - HTTP 요청, 외부 서비스 연동 필요하기도

    --

     ▪️ 단위 테스트: 비즈니스 로직의 클래스를 독립적으로 테스트 (메서드 단위로)

      - DB 연동 시 테스트 전후 상태 동일하게 유지되어야 함

      - 최대한 독립적으로, 최대한 작게

      - HTTP요청 매번 -> 비생산적

      - 동작을 빠르게 확인

      - 버그 미리 찾기

     단위 테스트를 위한 F.I.R.S.T 원칙

     ▪️ Fast 빠르게

     ▪️ Independent 독립적으로

      - 타 기능 실행 여부/순서와 상관 없이 정상 실행

     ▪️ Repeatable 반복 가능하도록

      - 어떤 환경에서도 반복 실행 가능

     ▪️ Self-validating 자체 검증 되도록

      - 자체 검증 결과 (성공 or 실패)

     ▪️ Timely 시기 적절하게

      - 기능 구현 직전 작성 -> 기능과 함께 단계적으로 업그레이드

     given-when-then (BDD)

     ▪️ given: 테스트 준비 과정. 전제 조건 및 입력값 등

     ▪️ when: 테스트 대상 동작 (호출)

     ▪️ then: 동작 결과 검증(Assertion: 테스트 케이스 예상 결과 값이 true여야 한다)

     JUnit을 사용한 단위 테스트

     ▪️ Java 애플리케이션 테스트를 위한 오픈 소스 테스트 프레임워크

     ▪️ 기본 구조

    public class JUnitDefaultStructure {
    
        @Test
        public void test() {
        	...
        }
        
    }

     ▪️ Assertion 메서드

      - assertionEquals(expected, actual)

      - assertNotNull(target, "fali message")

      - assertThrows(Exception.class, () -> {})

        등등 ...

     테스트 케이스 실행 전 후 처리

     ▪️ @ BeforeEach / AfterEach : 테스트 케이스 실행마다 직전/직후에 실행

     ▪️ @ BeforeAll / AfterAll: 테스트 케이스 클래스 한 번에 실행했을 때 딱 한 번만 실행 (static)

     Assumption

     ▪️ 조건부 테스트

     ▪️ assumeTrue(조건)

       => 조건이 true면 아래 나머지 로직 실행

     

    💨 하루를 마치며

    1. 나는 테스트 코드를 작성해본 일이 거의 없다. 아주 없다고 해도 무방하다. 그래서 걱정되었는데 책 보면서 야금야금 봐왔던 개념이 나와서 이해하는 게 아직까지는 어렵지 않았다.

    2. 슬라이스 테스트를 먼저 했어야 하는데 Hamcrest를 먼저 봤다. 밥먹고 좀 봐둬야겠따.

    2-1. MockMvcRequestBuilders랑 hamcrest 등등 import가 시원치 않다,,,

    3. 슬라이스 테스트는 아직 다 학습하진 않았지만 왜인지 과제하기가 겁난다. 헉 내일이 걱정된다.

    4. 요즘 무슨 일인지 내 자신에 대한 회의감에 빠져 앓다 나왔다. 블로그 작성에도 의욕이 없었다. 사실 아직 밀린 과제와 학습이 조금 남았다 (거의 수습하긴 했다만........) 다 그만하고 싶고 한 번 놓치고 나니 계속 밀려가는 걸 보면서도 아무것도 하지 않는 자신이 한심했따...🥲 새해인데... 남은 수습을 다 마치고 얼른 컨디션을 되찾기를ㅠ_ㅠ 나만 할 수 있는 일...

    반응형

    댓글