inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

워밍업 클럽 4기 BE - 2주차 발자국

민수킴
1

2주차 미션 회고

배운 내용을 토대로 실제 코드에 적용하면서 정말 많은 것을 배우고 느꼈다. 리팩토링에는 정답이 없지만 오답은 있을 수 있다는 것을 깨달았고, 앞으로 개발할 때 클린코드의 진정한 의미에 대해 생각하면서 코드를 작성해야겠다.

 

2주차 강의 회고

클린코드 강의를 마무리하고 본격적인 테스트 코드 강의에 들어가기 전 워밍업 느낌의 1~5장 챕터라고 생각됐다.

테스트의 개념부터 기본적인 테스트 코드 작성법까지 어찌보면 가장 중요한 챕터일지도 모른다는 생각이 들었다.

최대한 꼼꼼히 공부하면서 첫 시작부터 기반을 다진다는 마음가짐으로 강의를 들었다.

 

2주차 학습 내용 요약

테스트가 필요한 이유


소프트웨어 테스트 종류


기능 테스트

 

비기능 테스트

단위 테스트 시 검증해야 할 주요 케이스


테스트하기 어려운 영역


관측할 때마다 다른 값에 의존하는 코드 (현재 날짜/시간, 랜덤 값, 전역 변수/함수, 사용자 입력 등)

public class Order {
    public String generateOrderId() {
        return "ORD-" + UUID.randomUUID(); // 매번 다른 값
    }

    public boolean isTodayOrder(LocalDate orderDate) {
        return orderDate.equals(LocalDate.now()); // 현재 날짜 의존
    }
}

외부 세계에 영향을 주는 코드 (표준 출력, 메시지 발송, 데이터베이스 기록 등)

public class Notifier {
    public void sendNotification(String message) {
        System.out.println("Sending message: " + message); // 표준 출력
    }
}

public class UserRepository {
    public void save(User user) {
        // 실제 DB에 저장하는 코드 (예: JDBC, JPA)
        entityManager.persist(user); // 외부 세계에 영속성 부여
    }
}

TDD (Test Driven Development)


테스트를 먼저 작성하고, 그 테스트를 통과하는 최소한의 코드를 구현한 후, 리팩토링하는 개발 방식이다.

// Step 1 (Red): 실패하는 테스트 작성
@Test
void add_shouldReturnSum() {
    Calculator calc = new Calculator();
    assertEquals(5, calc.add(2, 3)); // 아직 add 메서드 없음 → 실패
}

// Step 2 (Green): 테스트 통과하는 최소한의 코드 작성
public int add(int a, int b) {
    return a + b;
}

// Step 3 (Refactor): 코드 리팩토링 (필요시 구조 개선 등)

BDD (Behavior Driven Development)


사용자 관점의 시나리오(행동)를 중심으로 기능을 정의하고 테스트하는 접근 방식이다.

Feature: 로그인 기능

  Scenario: 올바른 아이디와 비밀번호 입력 시 로그인 성공
    **Given** 사용자가 로그인 페이지에 접속했을 때
    **When** 아이디와 비밀번호를 올바르게 입력하면
    **Then** 로그인에 성공하고 홈 화면으로 이동한다

테스트 제대로 설명하기


- 음료 1개 추가 **테스트** (bad) → ~테스트 문장 지양
- 음료를 1개 **추가할 수 있다.** (not bad) → 명사의 나열보단 문장으로
- 음료를 1개 **추가하면 주문 목록에 담긴다.** (good) → 테스트 행위에 대한 결과까지
- 특정 시간 이전에 주문을 생성하면 **실패한다.** (bad) -> 테스트 현상 중점 기술
- **영업 시간** 이전에는 주문을 생성할 수 없다. (good) -> 도메인 용어 사용

답변 0