TDD, BDD에 대하여

Dal col·2025년 3월 18일

테스트코드

목록 보기
1/4

TDD란 무엇인가?

TDD는 무엇일까?
TDD(Test Driven Development)는 말 그대로 "테스트 주도 개발"입니다. 개발보다 테스트 코드를 먼저 작성하고, 그 테스트를 통과하는 코드를 작성하는 방식입니다.

많은 국비 학원이나 부트캠프에서는 시간 부족으로 TDD를 다루지 않지만, 실제 현업에서 효율성과 유지보수성 측면에서 매우 중요한 개발 방식입니다.

본인도 테스트 코드는 수료 후 개인 공부를 통해 최근에 사용을 해보고있다.

TDD의 필요성을 느낀 계기

최근 개인 프로젝트하면서 불편함을 느끼고있었습니다.

  • 매번 Postman을 통한 테스트
  • 로직 수정 후 Spring Boot 재실행
  • 계속 재실행으로 인한 시간 낭비

그러다 최근데 Practical Testing:실용적인 테스트 가이드라는 강의를 들으며 위와 같은 고민이 사라졌습니다.

  • @Test 실행만으로 바로 확인 가능
  • 빠른 피드백으로 로직 검증

최근 테스트코드 작성

@DisplayName("회원 생성과 비밀번호 일치 불일치 확인")
    @Test
    void createUser() {
        // given
        PasswordRequest passwordRequest = new PasswordRequest("qwer1234@naver.com", "qwer1234", "p");

        String password = bCryptPasswordEncoder.encode(passwordRequest.password());

        Users users = Users.builder()
                .username(passwordRequest.username())
                .email(passwordRequest.email())
                .password(password)
                .build();

        // when

        // then
        assertThat(users.getEmail()).isEqualTo("qwer1234@naver.com");

        assertThat(bCryptPasswordEncoder.matches("qwer1234", users.getPassword())).isTrue();

        if (bCryptPasswordEncoder.matches("qwer1234",users.getPassword())) {
            System.out.println("굳 맞음");
        } else {
            assertThatThrownBy(() -> {
                throw new LoginException(LoginErrorCode.PASSWORD_NOT_FOUND);
            })
                    .isInstanceOf(LoginException.class)
                    .hasMessageContaining("PASSWORD_NOT_FOUND");
        }
    }

BDD란 무엇인가?

BDD(Behavior Driven Development)는 TDD에서 발전된 개념으로, "행위 기반 테스트"라고 합니다.
테스트의 구조와 시나리오를 명확히 표현하는 데 초점을 맞춥니다.

BDD의 3단계 구성

단계설명핵심 포인트
Given테스트에 필요한 초기 상태 준비데이터, Mock 객체 생성
When실제 테스트할 행동 수행메서드 호출, 이벤트 발생 등
Then기대하는 결과 검증assertThat, assertEquals

팁(TIP) 정리

항목팁 내용
TDD 시작처음부터 완벽한 테스트 작성보다 간단한 테스트부터 작성해보세요. 작은 성공 경험이 중요합니다.
테스트 실행Spring Boot 실행 없이 단축키(Shift+F10 또는 Ctrl+R)로 빠르게 실행해보세요.
Postman vs 테스트코드Postman으로 매번 테스트하지 말고, 테스트 코드로 전환하면 자동화와 유지보수가 쉬워집니다.
BDD 적용given-when-then 주석을 코드에 명확히 넣으면 가독성 향상팀원과의 협업에서도 유리합니다.
@DisplayName 활용테스트마다 의미 있는 이름을 부여해서 나중에 어떤 테스트인지 쉽게 파악 가능하게 만드세요.

마무리

이전에는 바로 Controller, Service를 작성하여 Postman을 통해 테스트했지만 이젠 테스트코드를 사용해보며 테스트코드 -> Controller, Service 로직을 작성하는 식으로 개발을 해볼 예정입니다!

profile
백엔드 개발자가 되기까지의 과정

0개의 댓글