Back-end/테스트

TDD 테스트 주도 개발 연습

javapp 자바앱 2022. 10. 5. 00:00
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);
    }
}