IT

테스트 주도 개발이 뭔가요? (TDD, JUnit, 실제 사용사례)

jaewon_sss 2024. 7. 23. 17:12
반응형

TDD

1. TDD 개요

설명: 테스트 주도 개발(TDD)은 테스트를 먼저 작성하고, 그 테스트를 통과시키기 위한 최소한의 코드를 작성하는 개발 방법론입니다. 예시: 간단한 계산기 기능을 TDD로 개발한다고 가정합니다.

 

2. TDD의 단계

  1. 테스트 작성: 실패할 테스트 코드를 먼저 작성합니다.
  2. 코드 작성: 테스트를 통과시키기 위한 최소한의 코드를 작성합니다.
  3. 리팩토링: 코드를 개선하고, 테스트가 통과되는지 확인합니다.
// JUnit을 사용한 테스트 코드 작성
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CalculatorTest {
    @Test
    public void testAdd() {
        Calculator calc = new Calculator();
        int result = calc.add(2, 3);
        assertEquals(5, result);
    }
}

 

3. TDD의 장점

  1. 버그 감소: 코드를 작성하기 전에 테스트를 통해 잠재적인 버그를 미리 발견할 수 있습니다.
  2. 코드 품질 향상: 테스트를 통해 코드가 예상대로 작동하는지 확인할 수 있어 코드의 품질이 향상됩니다.
  3. 리팩토링 용이: 테스트가 작성되어 있으므로, 리팩토링 시 기존 기능이 제대로 작동하는지 쉽게 확인할 수 있습니다.

 

 

 

 

JUnit

1. JUnit 소개

설명: JUnit은 Java 프로그래밍 언어용 단위 테스트 프레임워크로, TDD의 구현을 쉽게 도와줍니다.

2. JUnit 설치

설명: Maven을 사용하여 JUnit을 프로젝트에 추가할 수 있습니다.

<!-- pom.xml에 JUnit 추가 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

3. 기본 테스트 작성

설명: JUnit을 사용하여 기본 테스트 클래스를 작성합니다.

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class SimpleTest {
    @Test
    public void testAddition() {
        assertEquals(2 + 3, 5);
    }
}

4. 테스트 실행

설명: 테스트를 실행하여 결과를 확인합니다.

# Maven을 사용하여 테스트 실행
mvn test

 

 

 

 

 

실전 적용 사례

 

1. 사용자 인증 시스템

설명: TDD와 JUnit을 사용하여 사용자 인증 시스템을 개발합니다.

// 테스트 작성
import static org.junit.Assert.assertTrue;
import org.junit.Test;

public class AuthServiceTest {
    @Test
    public void testAuthenticate() {
        AuthService authService = new AuthService();
        boolean result = authService.authenticate("user", "password");
        assertTrue(result);
    }
}

// 코드 작성
public class AuthService {
    public boolean authenticate(String username, String password) {
        // 간단한 인증 로직
        return "user".equals(username) && "password".equals(password);
    }
}

 

2. 쇼핑 카트 기능

설명: 쇼핑 카트 기능을 TDD로 구현합니다.

// 테스트 작성
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class ShoppingCartTest {
    @Test
    public void testAddItem() {
        ShoppingCart cart = new ShoppingCart();
        cart.addItem("Apple", 3);
        assertEquals(3, cart.getItemCount("Apple"));
    }
}

// 코드 작성
import java.util.HashMap;
import java.util.Map;

public class ShoppingCart {
    private Map<String, Integer> items = new HashMap<>();

    public void addItem(String item, int quantity) {
        items.put(item, quantity);
    }

    public int getItemCount(String item) {
        return items.getOrDefault(item, 0);
    }
}

 

3. 은행 계좌 관리 시스템

설명: 은행 계좌 관리 시스템을 TDD로 개발합니다.

// 테스트 작성
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class BankAccountTest {
    @Test
    public void testDeposit() {
        BankAccount account = new BankAccount();
        account.deposit(100);
        assertEquals(100, account.getBalance());
    }
}

// 코드 작성
public class BankAccount {
    private int balance = 0;

    public void deposit(int amount) {
        balance += amount;
    }

    public int getBalance() {
        return balance;
    }
}
반응형