프로그래밍/TDD

tdd 1.계산기 만들기(더하기)

Baesj 2021. 9. 16. 16:20

1. 기능을 검증하는 테스트 코드 작성

import org.junit.jupiter.api.Test;

public class CalculatorTest {

    @Test
    void 더하기() {
        //given
        //when
        //then
    }
}

 

2. 메서드의 이름, 파라미터, 정적 메서드, 인스턴스 메서드, 클래스 이름 등을 고민하고 적용하기

 - 계산기이니깐 클래스이름을 Calculator로 하자

 - 더하기이니깐 메서드 이름을 add로 하자

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

public class CalculatorTest {

    @Test
    void 더하기() {
        //given
        int a = 10;
        int b = 20;
        //when
        int result = Calculator.add(a, b);
        //then
        Assertions.assertThat(result).isEqualTo(30);
    }
}

 

3. 클래스가 없으므로 만들자

public class Calculator {
    public static int add(int a, int b) {
        return 0;
    }
}

 

4. 테스트를 실행해보자

예상되는 값이 30인데 0이 나왔으므로 테스트가 실패하게된다.

리턴값을 30으로 바꾸도 다시 실행해보자

성공했다

 

5. 다른 값도 추가해보자

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

public class CalculatorTest {

    @Test
    void 더하기() {
        //given
        int a = 10;
        int b = 20;
        int a2 = 100;
        int b2 = 50;
        //when
        int result = Calculator.add(a, b);
        int result2 = Calculator.add(a2, b2);
        //then
        Assertions.assertThat(result).isEqualTo(30);
        Assertions.assertThat(result2).isEqualTo(150);
    }
}

 

6. 테스트를 실행해보자

테스트가 실패하게 된다.

 

7. 클래스의 리턴값을 수정하자

public class Calculator {
    public static int add(int a, int b) {
        if (a == 10 && b == 20) {
            return 30;
        }
        return 150;
    }
}

8. 테스트를 실행해보자

테스트가 성공하게 된다

 

9. 테스트를 추가해보자

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

public class CalculatorTest {

    @Test
    void 더하기() {
        //given
        int a = 10;
        int b = 20;
        int a2 = 100;
        int b2 = 50;
        int a3 = 35;
        int b3 = 80;
        //when
        int result = Calculator.add(a, b);
        int result2 = Calculator.add(a2, b2);
        int result3 = Calculator.add(a3, b3);
        //then
        Assertions.assertThat(result).isEqualTo(30);
        Assertions.assertThat(result2).isEqualTo(150);
        Assertions.assertThat(result3).isEqualTo(115);
    }
}

 

10. 테스트를 실행해보자

실패하게 된다

 

11. 클래스 파일을 수정해보자

public class Calculator {
    public static int add(int a, int b) {
        return a + b;
    }
}

 

12. 테스트를 실행해보자

성공하게 된다

 

13. 테스트를 추가해보자

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

public class CalculatorTest {

    @Test
    void 더하기() {
        //given
        int a = 10;
        int b = 20;
        int a2 = 100;
        int b2 = 50;
        int a3 = 35;
        int b3 = 80;
        int a4 = 1;
        int b4 = 2;
        //when
        int result = Calculator.add(a, b);
        int result2 = Calculator.add(a2, b2);
        int result3 = Calculator.add(a3, b3);
        int result4 = Calculator.add(a4, b4);
        //then
        Assertions.assertThat(result).isEqualTo(30);
        Assertions.assertThat(result2).isEqualTo(150);
        Assertions.assertThat(result3).isEqualTo(115);
        Assertions.assertThat(result4).isEqualTo(3);
    }
}

14. 테스트를 실행해보자

성공하게 된다

 

이렇게 점진적으로 기능을 완성해가자