inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

인프런 워밍업 클럽 백엔드 3주차 후기

홍석주
0

3주차 후기

Readable Code 강의를 재밌게 수강하고, 드디어 고대하던 강의 중 하나인 테스트 코드 강의를 들었다.

나는 새로 기능을 만들어 볼 때마다 JUnit으로 테스트 코드를 돌려보려고 한다. 근데 아직 경험이 많이 부족하고 시간이 부족하다는 핑계로 미루게 된다. 그러다 보니 자연스레 서버를 켜서 직접 API를 호출해서 테스트를 하는 비효율적인 방법을 선택하고 있다.

이전에 인프런 CTO의 이동욱 님의 어느 글에서 안 좋은 방식이라 했던걸 내가 하고 있던 것이다..! ㅎㅎ

이를 지양하기 위해 이번 테스트 강의를 열심히 들었고, 들을 수록 이래서 테스트 코드를 작성해야 함을 배우게 되었다.

강의를 마저 다 들어서 얼른 회사에서도 다 적용해볼 수 있도록 해야겠다.

 

섹션2: 테스트는 왜 필요할까

테스트는 왜 필요할까?

💡 물론 테스트 코드를 어렵게 짜면 더 힘들어 질 수도 있다. 잘 짜는 것이 중요! 테스트는 귀찮지만 해야한다!

 

섹션3: 단위 테스트

 

수동테스트 VS 자동화된 테스트

class CafeKioskTest {

    @Test
    void add() {
        CafeKiosk cafeKiosk = new CafeKiosk();
        cafeKiosk.add(new Americano());

        System.out.println(">>> 담긴 음료 수 : " + cafeKiosk.getBeverages().size());
        System.out.println(">>> 담긴 음료 : " + cafeKiosk.getBeverages().get(0).getName());
    }
}

JUnit5로 테스트하기

테스트 케이스 세분화하기

테스트하기 어려운 영역을 분리하기

public Order createOrder() {
    LocalDateTime currentDateTime = LocalDateTime.now();
    final LocalTime currentTime = currentDateTime.toLocalTime();
    if (currentTime.isBefore(SHOP_OPEN_TIME) || currentTime.isAfter(SHOP_CLOSE_TIME)) {
        throw new IllegalArgumentException("주문 시간이 아닙니다. 관리자에게 문의하세요.");
    }

    return new Order(LocalDateTime.now(), beverages);
}
public Order createOrder(LocalDateTime currentDateTime) {
    final LocalTime currentTime = currentDateTime.toLocalTime();
    if (currentTime.isBefore(SHOP_OPEN_TIME) || currentTime.isAfter(SHOP_CLOSE_TIME)) {
        throw new IllegalArgumentException("주문 시간이 아닙니다. 관리자에게 문의하세요.");
    }

    return new Order(LocalDateTime.now(), beverages);
}

 

섹션4: TDD Test Drive Development

TDD: Test Driven Development

섹션5: 테스트는 []다

테스트는 []다.

DisplayName을 섬세하게

<aside> 💡

음료 1개 추가 테스트 → ~테스트 지양하기

음료를 1개 추가할 수 있다.

음료를 1개 추가하면 주문 목록에 담긴다 (결과 기술)

</aside>

<aside> 💡

특정 시간 이전에 주문을 생성하면 실패한다. (AS-IS)

영업 시작 시간 이전에는 주문을 생성할 수 없다. (TO-BE)

</aside>

BDD(Behavior Driver Development) 스타일로 작성하기

@org.junit.jupiter.api.DisplayName("")
@org.junit.jupiter.api.Test
void $METHOD_NAME$() {
    // given
    $END$
    // when
    
    // then
}

키워드 정리

섹션6: Spring & JPA 기반 테스트

 

Spring/JPA 훑어보기 & 기본 엔티티 설계

백엔드

답변 0