정의 : TDD는 개발 과정에서 테스트를 먼저 작성하고, 이 테스트를 통과할 수 있는 코드를 작성하는 방식
목적 : 코드의 신뢰성과 유지 보수성을 높이는 것
프로세스 :
@Test
public void testAddition() {
Calculator calculator = new Calculator();
int result = calculator.add(5, 3);
assertEquals(8, result);
}
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
장점 :
단점 :
도메인(Domain) : 사전적 의미로 영역, 집합, 유사한 업무의 집합
public class Order {
private OrderId id;
private Customer customer;
private List<OrderLine> orderLines;
private OrderStatus status;
public Order(Customer customer) {
this.customer = customer;
this.orderLines = new ArrayList<>();
this.status = OrderStatus.NEW;
}
public void addOrderLine(Product product, int quantity) {
OrderLine line = new OrderLine(product, quantity);
orderLines.add(line);
}
...
}
Given - When - Then
과 같은 언어를 사용하여 행동을 설명@Given("I have a calculator")
public void i_have_a_calculator() {
calculator = new Calculator();
}
@When("I add {int} and {int}")
public void i_add_and(int a, int b) {
result = calculator.add(a, b);
}
@Then("the result should be {int}")
public void the_result_should_be(int expected) {
assertEquals(expected, result);
}