1. 실패하는 테스트 작성 : 아직 구현되지 않은 기능에 대한 테스트를 먼저 작성
이 테스트는 당연히 실패할 것입니다.
2. 테스트를 통과하기 위한 코드 작성 : 테스트를 통과하기 위한 최소한의 코드를 작성
합니다.
3. 리팩토링 : 코드를 개선하고 중복을 제거합니다. 이 과정에서도 모든 테스트가 통과
해야 합니다.
이 사이클을 반복하면서 개발을 진행하게 되며, 이는 코드의 품질을 높이고 버그를 줄이
는 데 도움이 됩니다.
테스트 코드 작성 순서
테스트 케이스 작성
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.time.LocalDate;
public class DateCalculatorTest {
private DateCalculator dateCalculator;
@BeforeEach
void setup() {
dateCalculator = new DateCalculator();
}
@Test
void testCalculateAge() {
LocalDate birthDate = LocalDate.of(1990, 5, 15);
LocalDate currentDate = LocalDate.of(2022, 2, 28);
int expectAge = 32;
int actualAge = dateCalculator.calculateAge(birthDate, currentDate);
assertEquals(expectAge, actualAge);
}
@Test
void testCalculateDaysBetween() {
LocalDate startDate = LocalDate.of(2022, 2, 15);
LocalDate endDate = LocalDate.of(2022, 3, 1);
int expectedDays = 14;
int actualDays = dateCalculator.calculateDaysBetween(startDate, endDate);
assertEquals(expectedDays, actualDays);
}
@Test
void testIsLeapYear() {
int leapYear = 2024;
boolean isLeap = dateCalculator.isLeapYear(leapYear);
assertEquals(true,isLeap);
}
}
실패하는 테스트 실행
구현 코드 작성
import java.time.LocalDate;
public class DateCalculator {
public int calculateAge(LocalDate birthDate, LocalDate currentDate) {
return currentDate.getYear() - birthDate.getYear();
}
public int calculateDaysBetween(LocalDate startDate, LocalDate endDate) {
return (int) startDate.until(endDate).getDays();
}
public boolean isLeapYear(int year) {
return LocalDate.ofYearDay(year, 1).isLeapYear();
}
}
테스트 실행 및 성공 확인
테스트를 다시 실행하면 모두 성공
실패하지 않는 한 성공한 테스트를 기반으로 다음 단계로 진행
코드 리팩토링
==============================================
@어노테이션
TDD : 개발 방법론 중 하나. 테스트코드를 기반으로 개발하겠다
테스트하는 도구로 JUnit 사용한다.
단위테스트는 개발과정에 이루어져야한다.
Assertions 해당 조건에 맞았을 때 판단해줄 수 있는 부분.