inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[워밍업 클럽] BE 클린코드&테스트 3주차 발자국

hobit22
0

강의 요약

테스트란?

단위 테스트

JUnit 5

AssertJ / Fluent assertions for java

AssertJ

테스트 케이스 세분화하기

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

// BAD
public Order createOrder() {
    LocalDateTime currentDateTime = LocalDateTime.now();
    LocalTime currentTime = currentDateTime.toLocalTime();

    if (currentTime.isBefore(SHOP_OPEN_TIME) || currentTime.isAfter(SHOP_CLOSE_TIME)) {
        throw new IllegalArgumentException("주문 시간이 아닙니다.");
    }

    return new Order(currentDateTime, beverages);
}

// GOOD
public Order createOrder(LocalDateTime currentDateTime) {
    LocalTime currentTime = currentDateTime.toLocalTime();

    if (currentTime.isBefore(SHOP_OPEN_TIME) || currentTime.isAfter(SHOP_CLOSE_TIME)) {
        throw new IllegalArgumentException("주문 시간이 아닙니다.");
    }

    return new Order(currentDateTime, beverages);
}

TDD

선 기능 구현, 후 테스트 작성 시

선 테스트 작성, 후 기능 구현 시

테스트 코드는 문서

문서의 기능을 하기 위해서…

BDD

Given / When / Then

Given : 시나리오 진행에 필요한 모든 준비 과정 (객체, 값, 상태 등)

When : 시나리오 행동 진행

Then : 시나리오 진행에 대한 결과 명시, 검증

어떤 환경에서 (Given)

어떤 행동을 진행했을 때 (When)

어떤 상태 변화가 일어난다 (Then)

→ DisplayName에 명확하게 작성할 수 있다.

 

미션 회고

읽기 쉬운 코드에서 작성하였던 지뢰찾기를 기반으로 테스트 코드를 작성하였다.

어떤 코드를 테스트 해야할 지, 어떻게 테스트 코드를 짜야할 지 깊이 고민하게 되었다.

 

느낀점

테스트코드에 대해 어느 정도 감이 생기고 있는 것 같다. 하지만 여전히 실무에 적용하기엔 너무 어렵다.

비지니스 로직이 변경되더라도 테스트 코드가 어느정도 내구성을 가졌으면 하는데, 이렇게 작성하는게 매우 어렵다.

또한 Given 절에서 객체를 사전준비하는 과정이 너무 번거롭다.

이를 해결할 수 있는 좋은 방법이 있을 것 같은데..

여전히 테스트 코드는 귀찮고 어렵다.

백엔드

답변 0