TDD는 무엇일까?
TDD(Test Driven Development)는 말 그대로 "테스트 주도 개발"입니다. 개발보다 테스트 코드를 먼저 작성하고, 그 테스트를 통과하는 코드를 작성하는 방식입니다.
많은 국비 학원이나 부트캠프에서는 시간 부족으로 TDD를 다루지 않지만, 실제 현업에서 효율성과 유지보수성 측면에서 매우 중요한 개발 방식입니다.
본인도 테스트 코드는 수료 후 개인 공부를 통해 최근에 사용을 해보고있다.
최근 개인 프로젝트하면서 불편함을 느끼고있었습니다.
그러다 최근데 Practical Testing:실용적인 테스트 가이드라는 강의를 들으며 위와 같은 고민이 사라졌습니다.
@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(Behavior Driven Development)는 TDD에서 발전된 개념으로, "행위 기반 테스트"라고 합니다.
테스트의 구조와 시나리오를 명확히 표현하는 데 초점을 맞춥니다.
| 단계 | 설명 | 핵심 포인트 |
|---|---|---|
| Given | 테스트에 필요한 초기 상태 준비 | 데이터, Mock 객체 생성 |
| When | 실제 테스트할 행동 수행 | 메서드 호출, 이벤트 발생 등 |
| Then | 기대하는 결과 검증 | assertThat, assertEquals 등 |
| 항목 | 팁 내용 |
|---|---|
| TDD 시작 | 처음부터 완벽한 테스트 작성보다 간단한 테스트부터 작성해보세요. 작은 성공 경험이 중요합니다. |
| 테스트 실행 | Spring Boot 실행 없이 단축키(Shift+F10 또는 Ctrl+R)로 빠르게 실행해보세요. |
| Postman vs 테스트코드 | Postman으로 매번 테스트하지 말고, 테스트 코드로 전환하면 자동화와 유지보수가 쉬워집니다. |
| BDD 적용 | given-when-then 주석을 코드에 명확히 넣으면 가독성 향상과 팀원과의 협업에서도 유리합니다. |
| @DisplayName 활용 | 테스트마다 의미 있는 이름을 부여해서 나중에 어떤 테스트인지 쉽게 파악 가능하게 만드세요. |
이전에는 바로 Controller, Service를 작성하여 Postman을 통해 테스트했지만 이젠 테스트코드를 사용해보며 테스트코드 -> Controller, Service 로직을 작성하는 식으로 개발을 해볼 예정입니다!