본문 바로가기
Back-end/테스트

TDD 테스트 주도 개발 연습

by javapp 자바앱 2022. 10. 5.
728x90

 

TDD

TDD란 테스트 주도 개발이라고 하며

반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위 테스트 케이스를 작성하고

이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다.

 

리팩토링(유지보수)의 용이성

 

개발 과정

  • 실패한 테스트 작성
  • 코드가 테스트를 통과할 수 있도록 작성
  • 필요에 따라 코드 리팩토링
  • 프로세스 반복

 

주제 :Fizz Buzz

// 3으로 나누어 지면 Fizz
// 5로 나누어 지면 -> Buzz
// 3과 5로 나누어 지면 FizzBuzz
// 둘다 안나눠지면 숫자 출력

 

 

1. 실패한 테스트 코드 작성

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class FizzBuzzTest
{
    // 1. 실패한 테스트 코드 작성
    @DisplayName("3으로 나누어지는 경우")
    @Test
    @Order(1)
    void testForDivisibleByThree(){
        String expected = "Fizz";

        assertEquals(expected, FizzBuzz.compute(3), "Fizz 리턴");
    }
}

 

public class FizzBuzz {
    public static Object compute(int i) {
    }
}

 

 

2. 코드가 테스트를 통과할 수 있도록 작성

FizzBuzz.java

    public static Object compute(int i) {
        if(i%3 == 0) return "Fizz";
        return null;
    }

 


 

 

프로세스 반복 >>

실패한 테스트 코드 작성

FizzBuzzTest.java

    // 1. 실패한 테스트 코드 작성
    @DisplayName("5으로 나누어지는 경우")
    @Test
    @Order(2)
    void testForDivisibleByFive(){
        String expected = "Buzz";

        assertEquals(expected, FizzBuzz.compute(5), "Buzz 리턴");
    }

 

코드가 테스트를 통과할 수 있도록 작성

if 문 추가

public class FizzBuzz {
    public static Object compute(int i) {
        if(i%3 == 0) return "Fizz";

        if(i%5 == 0) return "Buzz";
        return null;
    }
}

 

 


 

 

실패한 테스트 코드 작성

// 1. 실패한 테스트 코드 작성
@DisplayName("3과 5로 나누어지는 경우")
@Test
@Order(3)
void testForDivisibleByThreeAndFive(){
    String expected = "FizzBuzz";

    assertEquals(expected, FizzBuzz.compute(15), "FizzBuzz 리턴");
}

// 1. 실패한 테스트 코드 작성
@DisplayName("나누어 떨어지지 않는 경우")
@Test
@Order(4)
void testForNotDivisibleByThreeOrFive(){
    String expected = "1";

    assertEquals(expected, FizzBuzz.compute(1), "1 리턴");
}

 

 

코드가 테스트를 통과할 수 있도록 작성

public class FizzBuzz {
    public static Object compute(int i) {
        if( (i%3 == 0) && (i%5==0)) return "FizzBuzz";

        if(i%3 == 0) return "Fizz";

        if(i%5 == 0) return "Buzz";
        return Integer.toString(i);
    }
}

 

 

 

 

 

 

 

 

 

 

 

댓글